回顾:银行账户管理器
本课属于 Coddy C++ 学习旅程的“面向对象编程”单元。第 33 课,共 104 课。
挑战
简单让我们创建一个完整的银行账户管理器,将你在本章学到的所有类属性概念结合起来:带有获取器和设置器的私有成员、const 成员函数、mutable 成员、静态变量和方法,以及友元函数。
你将创建两个文件来整理代码:
BankAccount.h:定义一个用于管理账户数据并实现适当封装的BankAccount类。你的类应包含:- 私有成员:
accountNumber(字符串)、ownerName(字符串)、balance(double),以及用于跟踪余额被查询次数的mutable int queryCount - 用于跟踪现有账户数量的私有静态成员
totalAccounts - 一个接收账户号码、所有者姓名和初始余额的构造函数。它应将
queryCount初始化为0,并递增totalAccounts - const 获取器:
getAccountNumber()、getOwnerName()和getBalance():每次调用余额获取器时,都应递增queryCount - 一个 const 获取器
getQueryCount(),用于返回余额被查询的次数 - 一个
deposit(double amount)方法,仅当金额为正数时才将其加到余额中 - 一个
withdraw(double amount)方法,仅当金额为正数且不超过当前余额时,才从余额中扣除该金额 - 一个静态方法
getTotalAccounts(),用于返回已创建的账户总数 - 声明一个友元函数
transfer(BankAccount& from, BankAccount& to, double amount),用于在账户之间转账。只有金额为正数且来源账户资金充足时,才应转账
在类定义之后定义静态成员和友元函数。
- 私有成员:
main.cpp:演示如何将所有这些功能结合起来使用。从输入中读取两个所有者姓名和两个初始余额(共四行:name1、balance1、name2、balance2),然后:- 创建两个
BankAccount对象,账户号码分别为"ACC001"和"ACC002" - 打印
"Total accounts: <count>" - 打印第一个账户的
"<name>: $<balance>" - 打印第二个账户的
"<name>: $<balance>" - 向第一个账户存入
500.0 - 打印第一个账户的
"After deposit - <name>: $<balance>" - 使用友元函数从第一个账户向第二个账户转账
300.0 - 打印
"After transfer:" - 打印第一个账户的
" <name>: $<balance>" - 打印第二个账户的
" <name>: $<balance>" - 打印第一个账户的
"Query count for <name>: <count>"
- 创建两个
使用 <iomanip> 中的 std::fixed 和 std::setprecision(2),将所有余额格式化为两位小数。使用 std::stod() 将字符串形式的余额输入转换为 double。
别忘了在头文件中添加头文件保护,并在需要的地方包含 <string> 和 <iostream>。
亲手试试
#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"
int main() {
// 读取输入
std::string name1, name2;
std::string balance1Str, balance2Str;
std::getline(std::cin, name1);
std::getline(std::cin, balance1Str);
std::getline(std::cin, name2);
std::getline(std::cin, balance2Str);
double balance1 = std::stod(balance1Str);
double balance2 = std::stod(balance2Str);
// 设置输出格式,保留 2 位小数
std::cout << std::fixed << std::setprecision(2);
// TODO: 创建两个 BankAccount 对象,账号分别为 "ACC001" 和 "ACC002"
// TODO: 打印 "Total accounts: <count>"
// TODO: 为第一个账户打印 "<name>: $<balance>"
// TODO: 为第二个账户打印 "<name>: $<balance>"
// TODO: 向第一个账户存入 500.0
// TODO: 为第一个账户打印 "After deposit - <name>: $<balance>"
// TODO: 使用友元函数从第一个账户向第二个账户转账 300.0
// TODO: 打印 "After transfer:"
// TODO: 为第一个账户打印 " <name>: $<balance>"(注意前面有 2 个空格的缩进)
// TODO: 为第二个账户打印 " <name>: $<balance>"(注意前面有 2 个空格的缩进)
// TODO: 为第一个账户输出 "Query count for <name>: <count>"
return 0;
}
面向对象编程中的所有课
自己练习: C++ 在线编译器