如何创建具有多重继承的子类,继承指定构造函数的所需值?

问题描述 投票:0回答:0

我目前正在学习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

c++ inheritance multiple-inheritance
© www.soinside.com 2019 - 2024. All rights reserved.