【发布时间】:2009-04-22 06:59:32
【问题描述】:
我有这个代码来代表银行:
class Bank {
friend class InvestmentMethod;
std::vector<BaseBankAccount*> accounts;
public:
//...
BaseBankAccount 是银行中所有账户的抽象类:
class BaseBankAccount {
public:
BaseBankAccount() {}
virtual int getInterest() const = 0;
virtual int getInvestedSum() const = 0;
virtual void increaseDepositSum(int additionalSum) = 0;
virtual void close(std::string& reason) = 0;
virtual ~BaseBankAccount() {}
};
问题是,当我通过指向基类对象的指针使用指向派生类对象的指针进行操作时,我可以调用的方法集受到 BaseBankAccount 公共接口的限制——无论 REAL 对象是什么类型。
例如,并非每个账户都可以选择增加已投资金额 - 所以,我没有在基类中包含此方法:
class BankAccount: public BaseBankAccount {
protected:
BaseDeposit* deposit;
double sumInvested;
public:
BankAccount(int sum, int term, int inter): sumInvested(sum), depositTerm(term), interest(inter) {}
int getInterest() const { return interest; }
int getInvestedSum() const { return sumInvested; }
void prolong(int increaseTerm) {
depositTerm += increaseTerm;
}
void increaseInvestment(double addition) {
sumInvested += addition;
}
virtual ~BankAccount() {}
};
那么,我想叫它:
Bank bank1(...);
bank1.accounts[i]->increaseInvestment(1000.0);
那么,在这种情况下,我该怎么做才能访问派生类对象的接口呢?据我所知,每次我需要调用特定功能时向下转换为具体类型不好。
再创建一个派生自此的抽象类以扩展接口?
为我需要实现的每个特定类型创建并行层次结构(看起来有点繁重)?
【问题讨论】:
-
方法当然是虚拟的 - 对不起
-
在我看来,解决这个问题的最简单方法是将数据字段从 BankAccount 推送到其基类
标签: c++ inheritance pointers