Вызов конструктора аргументов базового класса 2 в конструктор с одним аргументом подкласса

Как говорит заголовок, у меня есть некоторые проблемы с вызовом конструктора базового класса в конструкторе подкласса

База:

account.h
    Account(double, Customer*)
account.cpp
    Account::Account(double b, Customer *cu)
    {
    balance = b;
    cust = *cu;
    }

Подкласс:

savings.h
    Savings(double);
savings.cpp
    Savings::Savings(double intRate) : Account(b, cu)
    {
    interestRate = intRate;
    }

Ошибка, которую я получаю, b и cu не определены. Спасибо за помощь

3 ответа

Решение

Подумайте, как вы создаете SavingsAccount,

Вы можете создать один, используя

SavingsAccount ac1(0.01);

Если бы вы сделали это, каков был бы баланс на этом объекте? Кто будет Customer для этого объекта.

Вы должны предоставить баланс, а также Customer когда вы создаете SavingsAccount, Что-то вроде:

Customer* cu = new Customer; // Or get the customer based on some other data
SavingsAccount ac1(100.0, cu, 0.01);

имеет смысл. Вы предоставляете все данные, необходимые для SavingsAccount, Чтобы создать такой объект, вам нужно определить конструктор SavingsAccount соответственно.

Savings::Savings(double b, Customer *cu, double intRate);

Это может быть правильно реализовано с помощью:

Savings::Savings(double b,
                 Customer *cu,
                 double intRate) : Account(b, cu), interestRate(intRate) {}

В вашем подклассе Savings вам нужно определить b а также cu куда перейти конструктору базы AccountНапример:

Savings::Savings(double b, Customer* cu, double intRate) : Account(b, cu) {
    interestRate = intRate;
}

Такой, что конструктор Savings принимает double а также Customer* Аргументы, необходимые для передачи конструктору базового класса.

Я думаю, что предыдущий ответ неверен, потому что в Account не нужно указывать также intRate. Так:

Savings::Savings(double b, Customer* cu, double intRate) : Account(b, cu)
{ interestRate = intRate; }
Другие вопросы по тегам