基类:
libpthread
为简单起见,我遗漏了无关的成员/方法等。
所以,在这种情况下:class SavingsAccount
{
public:
void AddInterest(); // add interest to balance based on APR (interest rate)
private:
static double APR;
double Balance;
}
class CheckingAccount: public SavingsAccount
{
private:
static double APR;
}
应该与CheckingAccount
的行为相同,但它应该具有不同的APR(利率)。所有SavingsAccount
共享相同的SavingsAccounts
,所有APR
共享自己的CheckingAccounts
(因此变量是静态的)。这是一个赋值,我们应该使用APR
的静态成员变量。
从我的研究和测试中,我似乎找不到覆盖APR
类中的AddInterest()
方法以使其使用CheckingAccount
的方法。如果是这种情况,那么CheckingAccount::APR
中的大多数方法都必须被覆盖,因为许多方法都使用SavingsAccount
,这似乎会破坏学习继承类的能力。
我错过了什么吗?
APR
方法,供参考:
AddInterest()
编辑:我遇到的原始问题(在SavingsAccount::AddInterest()
{
double interest = (this->APR/100)/12 * this->getBalance();
this->setBalance(this->getBalance() + interest);
}
中覆盖APR之前)是:
CheckingAccount
修改int main()
{
SavingsAccount sav;
CheckingAccount chk;
sav.setAPR(0.2);
chk.setAPR(0.1);
cout << sav.getAPR() << endl; // OUTPUTS "0.1"!!
return 0;
}
个对象的APR会修改CheckingAccount
个APR
个对象!这对我来说很有意义,因为SavingsAccount
是静态的,但我不确定最佳解决方案是什么。
答案 0 :(得分:3)
我建议使用不同的类层次结构:
class Account {};
class SavingsAccount : public Account {};
class CheckingAccount : public Account {};
然后,将virtual
成员函数添加到Account
:
virtual double getAPR() = 0;
然后使用Account::AddInterest()
实施getAPR()
。
class Account
{
public:
virtual ~Account() {}
// Add other functions as needed
// ...
void AddInterest()
{
// Implement using getAPR()
double interest = (this->APR/100)/12 * this->getBalance();
this->setBalance(this->getBalance() + interest);
}
virtual double getAPR() = 0;
private:
double Balance;
};
class SavingsAccount : public Account
{
public:
virtual double getAPR() { return APR; }
private:
static double APR;
}
class CheckingAccount : public Account
{
public:
virtual double getAPR() { return APR; }
private:
static double APR;
}