获取余额
本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 26 课,共 61 课。
挑战
简单你的银行账户即将完成!你已经实现了创建账户、存入资金和取款的功能,但还缺少一个关键部分。目前,外部代码无法查看当前余额。我们来添加一个 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 在线编译器