Вызов конструктора аргументов базового класса 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; }