Menu
CoddyTech

获取余额

本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 26 课,共 61 课。

challenge icon

挑战

简单

你的银行账户即将完成!你已经实现了创建账户、存入资金和取款的功能,但还缺少一个关键部分。目前,外部代码无法查看当前余额。我们来添加一个 getter 函数,解决这个问题。

getter 是在封装的模块中公开隐藏数据的正确方式。你不需要将余额字段设为公开(这会破坏封装),而是提供一个只读函数来返回余额值。这样既能保护数据,也能允许受控访问。

接下来继续使用这 3 个文件:

  • account.h:添加一个新的函数原型:get_balance。这个函数接收一个 const Account *(因为它只读取数据,不会修改数据),并返回一个表示当前余额的 double。保留所有现有声明。
  • account.c:实现 get_balance 函数。它只需返回账户中隐藏的余额字段。注意,这个函数可以访问内部数据,因为它和结构体定义在同一个文件中:外部代码仍然无法直接查看结构体的内部内容。
  • main.c:现在你终于可以查看账户内部的情况了!创建一个账户,进行一些交易,并使用新添加的 getter 在每个步骤显示余额。

你会收到 4 个输入:账户 ID(一个整数)、存款金额、取款金额和第二笔存款金额。

在主文件中,创建一个账户并打印初始余额(应为 0.00)。存入第一笔金额并打印新余额。取出指定金额,再次打印余额。最后,存入第二笔金额并打印最终余额。然后销毁账户。

按以下格式打印输出:

Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyed

其中,1001 是账户 ID,余额依次表示初始余额(0.00)、存入 500.00 后的余额、取出 300.00 后的余额,以及再存入 150.00 后的余额。使用 %.2f 将所有余额格式化为两位小数。

添加这个 getter 后,你的银行账户模块现在可以完整且受控地访问账户数据:用户可以查看余额,但只能通过经过验证的存款和取款函数修改余额。

亲手试试

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double deposit1;
    scanf("%lf", &deposit1);
    
    double withdraw_amount;
    scanf("%lf", &withdraw_amount);
    
    double deposit2;
    scanf("%lf", &deposit2);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    // TODO: 使用 get_balance 输出初始余额
    
    deposit(account, deposit1);
    // TODO: 输出第一次存款后的余额
    
    withdraw(account, withdraw_amount);
    // TODO: 输出取款后的余额
    
    deposit(account, deposit2);
    // TODO: 输出第二次存款后的余额
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

面向对象编程中的所有课

自己练习: C 在线编译器