gpt4 book ai didi

c++ - 让基类的方法使用继承类的静态成员变量……可能吗?

转载 作者:行者123 更新时间:2023-11-30 02:36:03 25 4
gpt4 key购买 nike

基类:

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 应该和 SavingsAccount 一样,但是它应该有不同的 APR(利率)。所有 SavingsAccounts 共享相同的 APR,所有 CheckingAccounts 共享它们自己的 APR(因此变量是静态的)。这是一个赋值,我们应该为 APR 使用静态成员变量。

根据我的研究和测试,我似乎无法找到任何方法来覆盖 CheckingAccount 类中的 AddInterest() 方法以使其使用 CheckingAccount::APR。如果是这种情况,则必须覆盖 SavingsAccount 中的大多数方法,因为许多方法使用 APR,这似乎扼杀了学习继承类的意义.

我错过了什么吗?

AddInterest()方法,供引用:

SavingsAccount::AddInterest()
{
double interest = (this->APR/100)/12 * this->getBalance();
this->setBalance(this->getBalance() + interest);
}

编辑:我遇到的最初问题(在 CheckingAccount 中覆盖 APR 之前)如下:

int main()
{
SavingsAccount sav;
CheckingAccount chk;

sav.setAPR(0.2);
chk.setAPR(0.1);

cout << sav.getAPR() << endl; // OUTPUTS "0.1"!!

return 0;
}

修改 CheckingAccount 对象的 APR 会修改 SavingsAccount 对象的 APR!这对我来说很有意义,因为 APR 是静态的,但我不确定最好的解决方案是什么。

最佳答案

我建议使用不同的类层次结构:

class Account {};
class SavingsAccount : public Account {};
class CheckingAccount : public Account {};

然后,为Account添加一个virtual成员函数:

virtual double getAPR() = 0;

然后,使用 getAPR() 实现 Account::AddInterest()

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;
}

关于c++ - 让基类的方法使用继承类的静态成员变量……可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com