我有這樣的代碼來表示銀行:
通過指針到基類的指針到派生類對象操作對象
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對象是什麼類型。
例如,不是每個賬戶有一個選項,以增加已投入總和 - 所以,我didn`t包括在基類中此方法:
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);
那麼,在這種情況下,我能做些什麼來訪問派生類對象的接口呢?據我所知,向下轉換爲具體類型每次我需要調用具體功能不好。
創建一個派生自此的抽象類來擴展接口?
爲我需要實現的每種特定類型創建並行層次結構(看起來有點重要)?
方法是虛擬的,當然 - 我真的很抱歉 – chester89 2009-04-22 07:39:32
在我看來,要解決這個問題最簡單的方法是從的BankAccount數據字段推到它的基類 – chester89 2009-04-22 08:50:50