考虑以下代码
class BankAccount
{
protected:
int accNo;
int balance;
std::string custName;
std::string custAddress;
public:
BankAccount(int aNo, int bal, std::string name, std::string address);//:accNo(aNo), balance(bal), custName(name), custAddress(address);
BankAccount(const BankAccount&);
BankAccount();
~BankAccount();
BankAccount& operator=(const BankAccount&);
int getAccNumber() const {return accNo;};
virtual int getBalance() const {return balance;};
std::string getAccountHolderName()const {return custName;};
std::string getAccountHolderAddress()const {return custAddress;};
virtual std::string getAccountType()const{return "UNKNOWN";};
};
class CurrentAccount:public BankAccount
{
private:
int dailyTrancLimit;
public:
CurrentAccount(int aNo, int bal, std::string name, std::string address);
int getTransactionLimit()const {return dailyTrancLimit;};
void setTranscationLimit(int transLimit){dailyTrancLimit = transLimit;};
std::string getAccountType()const{return "CURRENT";};
};
class SavingAccount:public BankAccount
{
private:
int intrestRate;
int accumuatedIntrest;
public:
SavingAccount(int aNo, int bal, std::string name, std::string address);
int getBalance()const {return balance+accumuatedIntrest;};
void setIntrestEarned(int intrest){accumuatedIntrest=intrest;};
std::string getAccountType()const{return "SAVINGS";};
};
我想使用基类指针在 SavingAccount 类中调用setIntrestEarned()
。我不想在基类 BankAccount 中将setIntrestEarned()
添加为virtual
,因为它在其他类型的帐户(如派生一个 CurrentAccount )中没有意义>。
如果我们继续将不同的派生类中的各种函数添加为基类中的虚函数,那么它最终将像派生类的函数的超集一样结束。
设计这些类型的类层次结构的最佳方法是什么?
答案 0 :(得分:0)
如果它在基类中没有意义,那么您不需要继承它。
继承仅在以下形式中有用: B是A的子集。 B可以具有A没有的排他功能。
因此,如果您的Savingsacc类需要A包含的某些信息,则继承它,并为A创建不需要的B专有功能,因为C也可能是A的子集。