如何用面向对象的方式,在C++中设计一个Bank类来管理某个银行账户的资金流动?该类应包含属性如账号、开户日期和余额,以及方法如存款、取款、记录交易明细,并强调不能使用内置的数据结构(如结构体)来实现这一功能。
时间: 2024-10-19 11:16:42 浏览: 29
在C++中,我们可以使用类和封装的概念来设计一个Bank类来管理银行账户。由于题目要求避免直接使用内置的数据结构,我们将使用纯虚函数和派生类来模拟账户的行为。首先,我们创建一个基础账户抽象类Account,并在之后定义具体的账户类型如CheckingAccount和SavingsAccount。
```cpp
#include <iostream>
#include <string>
class Account {
protected:
std::string accountNumber;
std::string openingDate;
double balance;
public:
// 构造函数和析构函数
Account(const std::string& accountNumber, const std::string& openingDate) :
accountNumber(accountNumber), openingDate(openingDate), balance(0.0) {}
virtual ~Account() {}
// 纯虚函数,用于记录交易
virtual void recordTransaction(const std::string& description, double amount) = 0;
// 存款和取款方法,返回新的余额
double deposit(double amount) {
balance += amount;
return balance;
}
double withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
return balance;
} else {
throw std::runtime_error("Insufficient funds.");
}
}
// 获取账户信息
virtual std::string getAccountInfo() const {
return "Account Number: " + accountNumber +
", Opening Date: " + openingDate +
", Balance: $" + std::to_string(balance);
}
};
class CheckingAccount : public Account {
public:
// 实现recordTransaction
void recordTransaction(const std::string& description, double amount) override {
std::cout << "Recording transaction: " << description << ", Amount: $" << amount << "\n";
}
};
class SavingsAccount : public Account {
public:
// 实现recordTransaction
void recordTransaction(const std::string& description, double amount) override {
std::cout << "Recording transaction for savings: " << description << ", Amount: $" << amount << "\n";
}
};
int main() {
CheckingAccount checkingAcc("123456", "2023-01-01");
SavingsAccount savingsAcc("789012", "2023-02-01");
checkingAcc.deposit(500);
checkingAcc.withdraw(200);
savingsAcc.deposit(1000);
std::cout << checkingAcc.getAccountInfo() << std::endl;
std::cout << savingsAcc.getAccountInfo() << std::endl;
return 0;
}
```
在这个例子中,Account是一个抽象基类,它包含了账户的基本属性和一些通用的方法。CheckingAccount和SavingsAccount作为派生类,分别实现了记录交易的具体行为。在main函数中,我们创建了这两种类型的账户并进行了操作。
阅读全文