Я написал простую программу, которая занимается повторным наследованием. Я использую базовый класс, два класса ребенка и класс внучатМножественное наследование и унаследованный элемент данных в списке инициализации конструктора производного класса
class Parent{
public:
Parent(string Word = "", double A = 1.00, double B = 1.00): sWord(Word), dA(A), dB(B){
}
//Member function
void Operation(){
cout << dA << " + " << dB << " = " << (dA + dB) << endl;
}
protected:
string sWord;
double dA;
double dB;
};
Теперь вот первый класс ребенок
class Child1 : public Parent{
public:
//Constructor with initialisation list and inherited data values from Parent class
Child1(string Word, double A, double B , string Text = "" , double C = 0.00, double D = 0.00): Parent(Word, A, B), sText(Text), dC(C), dD(D){};
//member function
void Operation(){
cout << dA << " x " << dB << " x " << dC << " x " << dD << " = " << (dA*dB*dC*dD) << endl;}
void Average(){
cout << "Average: " << ((dA+dB+dC+dD)/4) << endl;}
protected:
string sText;
double dC;
double dD;
};
Вот второй дочерний класс
class Child2 : public Parent {
public:
//Constructor with explicit inherited initialisation list and inherited data values from Base Class
Child2(string Word, double A, double B, string Name = "", double E = 0.00, double F = 0.00): Parent(Word, A, B), sName(Name), dE(E), dF(F){}
//member functions
void Operation(){
cout << "(" << dA << " x " << dB << ") - (" << dE << "/" << dF << ")" << " = "
<< (dA*dB)-(dE/dF) << endl;}
void Average(){
cout << "Average: " << ((dA+dB+dE+dF)/4) << endl;}
protected:
string sName;
double dE;
double dF;
};
Вот класс внука, который имеет дело с множественным наследованием
В основной функции я затем создать объект внучат и инициализирует его так:
GrandChild gObj("N\A", 24, 7, "N\A", 19, 6);
//calling the void data member function in the GrandChild class
gObj.Operation();
Ответ я получаю на это
SUM: 0
Однако ответ должен быть 56! Очевидно, что используются унаследованные значения по умолчанию, используемые в конструкторе для класса GrandChild, а не значения данных, которые включены в конструкцию объекта GrandChild. Как я могу решить эту проблему?
Расскажите об этом своему профессору, поскольку у вас нет никаких вопросов. – P0W
Извините, вопрос был лучше написан сейчас. Спасибо – Josh
Это не значения по умолчанию в конструкторе большого дочернего объекта, которые используются, но те, которые содержатся в конструкторах дочерних объектов. Фактически вы дали значения A и B, но не для CD и E, проверьте свои порядков параметров и значений по умолчанию в дочерних классах – Drax