Наличие в методе базового класса статической переменной-члена унаследованного класса … возможно?

Базовый класс:

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 (следовательно, переменные являются статическими). Это для назначения, и мы должны использовать статические переменные-члены для APRs.

Судя по моим исследованиям и тестам, я не могу найти способ обойти 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;
}

Модификация АТР CheckingAccount объекты изменяет APR из SavingsAccount объекты! Это имеет смысл для меня, так как APR статичен, но я не уверен, что это лучшее решение.

1

Решение

Я бы предложил другую иерархию классов:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]