C++ 派生类构造函数初始化列表中的多重继承和继承数据成员

C++ 派生类构造函数初始化列表中的多重继承和继承数据成员,c++,multiple-inheritance,qualifiers,C++,Multiple Inheritance,Qualifiers,我已经写了一个简单的程序来处理重复继承。 我使用一个基类、两个子类和一个孙子类 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 << " = " &

我已经写了一个简单的程序来处理重复继承。 我使用一个基类、两个子类和一个孙子类

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;
};
我得到的答案是

SUM: 0

然而,答案应该是56!显然,使用的是孙子类构造函数中使用的默认继承值,而不是孙子对象构造中包含的数据值。如何解决这个问题?

为了让代码按我所希望的方式工作,我做了以下更改

  //Constructor with explicitly inherited data members
GrandChild(string Word, double A, double B, string Text, double C, double D,
      string Name, double E, double F):
          Child1(Word, A, B, Text, C, D), 
              Child2(Word, A, B, Name, E, F){ }
基本上,每个子类都继承自己单独的父类。此父类的数据成员出现在两个子类构造函数列表中。在构造孙子类时,我在其构造函数中将这些值声明为参数(仅一次以避免重复)!我还包括继承的子类

大体上,我可以创建一个孙子对象,如下所示:

GrandChild gObj("N\A", 24, 7, "N\A", 19, 6);

//calling the void data member function in the GrandChild class
gObj.Operation();
GrandChild gObj("n\a", 0.00, 0.00, "text", 3, 3, "text", 3, 3, 7);
使用点运算符和void成员函数,我得到了正确的答案:

gObj.Operation()
即:

sum: 12

把这个告诉你的教授,因为你没有任何问题。对不起,这个问题现在写得更好了。ThanksIt不是所使用的grand child对象构造函数中的默认值,而是子对象构造函数中的默认值。。实际上,您给了A和B值,但没有给C D和E值,请检查您的子类中的参数顺序和默认值当我更改相应子构造函数中C D E和F的值时,请执行void操作()相应地显示不同的结果。但是,我希望使用提供给对象gObj的数据值,而不是这些默认值。我该怎么做?
sum: 12