Как я могу вычислить значение переменной-члена дочернего класса в его конструкторе, а затем перейти к конструктору родителя?Как дочерний класс вызывает конструктор родительского класса, который по-разному инициализирует переменные-члены? [C++]
Мотивация заключается в том, что если в конструкторе по умолчанию родительского класса много вычислений, то я не хочу выполнять эти вычисления и заменять их только теми, которые были вычислены дочерним классом сразу после.
Например:
Car.h
class Car
{
public:
Car();
Car(double Price) ;
...
private:
double price;
double DetermineMarketPrice();
};
Car.cpp
Car::Car()
{
//some other long computation
price = DetermineMarketPrice();
}
Car::Car(double Price)
{
price = Price;
}
...
Porche.h
class Porche : public Car
{
public:
Porche();
...
private:
double price;
double discount;
double fee;
double DetermineMarketPrice();
double RetrieveFee();
double CheckDiscount();
...
};
Porche.cpp
Porche::Porche():Car(price)
{
discount = CheckDiscount();
fee = = RetrieveFee();
price = DetermineMarketPrice() * (1-discount) + fee;
}
В этом случае цена Porche еще не известна. Он должен быть вычислен в конструкторе. Если я вызову конструктор родителя, как это, похоже, он будет пропускать еще не инициализированную цену.
Что было бы хорошим способом передать некоторое значение переменных-членов, которые могут быть известны только в конце инициализации класса Child?
Можете ли вы определить значение «Определить маркеры», «RetrieveFee» и «CheckDiscout»? – fdlm
В любом случае, «double» не подходит для денег. Значение 'lots_of_pennies * 0.01' не обязательно равно' lots_of_pennies/100'. –
Спасибо за ваши комментарии и советы! Теперь я понял, что вместо того, чтобы рассматривать это как техническую проблему, как в том, как ее кодировать, я должен рассматривать это скорее как проблему дизайна. Хотя есть способы обойти его, я думаю, что производные классы должны просто быть родительским классом с дополнительными спецификациями или функциями. Наследование не предназначено для того, чтобы рассматривать два класса, делающих разные вещи как один класс. Я предполагаю, что я бы сделал, это создать еще один общий класс, который будет служить родителем для обоих этих классов. – tuzzer