我目前正在学习c++,并且遇到了多重继承的问题。我做了一个简单的程序,其中有 4 个类:A、B、C 和 D A 是父类,B 和 C 是 A 的子类,D 是 B 和 C 的子类。
我的问题是,我希望 D 对象的值初始化为他在构造函数中声明的那样,通过取 A::a 的值为 a 的值为 1,但我得到的值为 5,更准确地说是我得到的 D 是前一个构造函数的值,在这种情况下是 C。如何使 D 像 D 构造函数中所述那样选择指定构造函数的值?首先是A类
的实现#include <iostream>
#include <string>
class A
{
public:
A():a(1){};
~A(){std::cout << "Destructor Called\n";};
protected:
int a;
};
class B: virtual public A
{
public:
B(){a = 3;};
~B(){std::cout << "Destructor Called\n";};
};
class C : virtual public A
{
public:
C(){a = 5;};
~C(){std::cout << "Destructor Called\n";};
};
class D : public B, public C
{
public:
D()
{
a = A::a;
std::cout << "a value is: " << a << " for d objects\n";
}
~D(){std::cout << "Destructor Called\n";};
};
int main (void)
{
D test;
}
这是我在终端上得到的
a value is: 5 for d objects //value of a in C constructor
Destructor Called
Destructor Called
Destructor Called
Destructor Called
然而我期望的是:
a value is: 1 for d objects // value of a in A constructor
Destructor Called
Destructor Called
Destructor Called
Destructor Called