C++类方法实现求助:OOP新手的全局问题定义困惑
嘿,作为OOP新手,你已经搭建了不错的类基础框架!我来帮你把Account类的方法补全,再聊聊所谓“全局问题”的合理处理方式,避免踩坑。
一、完善Account类的方法实现
首先,咱们先给Account类补充必要的public方法,再逐一实现它们:
1. 更新Account的类定义
class Account { private: int number; double balance; double interestRate; Client* owner; public: // 构造函数:初始化账号、余额、利率,绑定客户 Account(int num, double bal, double rate, Client* client); // 析构函数:用于内存清理(后续会说明) ~Account(); // Getter方法,获取私有成员 int getNumber(); double getBalance(); double getInterestRate(); Client* getOwner(); // 核心业务方法 void deposit(double amount); // 存款 bool withdraw(double amount); // 取款(返回操作是否成功) void addInterest(); // 计算并添加利息 };
2. 实现Account的各个方法
// 构造函数:用初始化列表简化成员初始化,绑定客户指针 Account::Account(int num, double bal, double rate, Client* client) : number(num), balance(bal), interestRate(rate), owner(client) {} // 析构函数:如果客户对象是由Account创建的,这里需要delete,但通常客户由外部管理,暂时留空 Account::~Account() {} // Getter方法实现 int Account::getNumber() { return number; } double Account::getBalance() { return balance; } double Account::getInterestRate() { return interestRate; } Client* Account::getOwner() { return owner; } // 存款:仅允许存入正数金额 void Account::deposit(double amount) { if (amount > 0) { balance += amount; } } // 取款:检查余额是否足够,足够则扣减并返回成功,否则返回失败 bool Account::withdraw(double amount) { if (amount > 0 && balance >= amount) { balance -= amount; return true; } return false; } // 计算利息:将余额乘以利率后加到余额中 void Account::addInterest() { balance += balance * interestRate; }
二、全局问题的合理处理
你提到的“全局定义当前问题”,应该是指如何统一管理所有Client和Account对象吧?尽量别用全局变量——全局变量会让代码耦合度变高、难以维护,还容易引发意想不到的错误。
推荐用一个Bank类来封装全局管理逻辑,把所有客户和账户的操作都集中到这个类里:
示例:Bank管理类
#include <vector> #include <iostream> class Bank { private: std::vector<Client*> clients; std::vector<Account*> accounts; public: // 添加客户到银行系统 void addClient(Client* client) { clients.push_back(client); } // 添加账户到银行系统 void addAccount(Account* account) { accounts.push_back(account); } // 根据客户编号查找客户 Client* findClientByCode(int code) { for (auto client : clients) { if (client->getCode() == code) { return client; } } return nullptr; // 未找到返回空指针 } // 打印所有账户的基本信息 void printAllAccounts() { for (auto account : accounts) { std::cout << "账号:" << account->getNumber() << ",客户:" << account->getOwner()->getName() << ",余额:" << account->getBalance() << std::endl; } } // 析构函数:清理所有客户和账户的内存,避免泄漏 ~Bank() { for (auto client : clients) { delete client; } for (auto account : accounts) { delete account; } } };
使用示例
int main() { Bank myBank; // 创建客户并加入银行系统 Client* client1 = new Client(1001, "张三"); myBank.addClient(client1); // 创建账户并绑定客户,加入银行系统 Account* account1 = new Account(50001, 1000.0, 0.02, client1); myBank.addAccount(account1); // 执行账户操作 account1->deposit(500); account1->addInterest(); // 查看所有账户状态 myBank.printAllAccounts(); return 0; }
额外提醒:内存安全
上面的例子用了原始指针,新手容易忘记释放内存导致泄漏。如果你的C版本支持C11及以上,推荐用智能指针(std::unique_ptr或std::shared_ptr)来管理内存,比如把vector<Client*>改成vector<std::unique_ptr<Client>>,这样编译器会自动帮你清理内存,不用手动写delete。
内容的提问来源于stack exchange,提问作者Honza Kollárik
相关产品推荐
相关产品推荐

