使用虚拟基类时,多重继承是如何工作的

How does multiple inheritance works when using virtual base class?

本文关键字:何工作 工作 虚拟 基类 多重继承      更新时间:2023-10-16

使用虚拟基类时,多重继承是如何工作的?我们如何知道何时何地应该使用虚拟基类?

对于下面的代码,我们如何获得输出?

class A {
    public: 
        A() {
            cout<<"t A";
        }
};
class B: public A {
    public:
        B() {
            cout<<"t B";
        }
};
class C: public B {
    public:
        C() {
            cout<<"t C";
        }
};
class D: virtual C {
    public:
        D() {
            cout<<"t D";
        }
};
class E: virtual C, virtual D {
    public:
        E() {
            cout<<"t E";
        }
};
class F: public B, virtual E {
    public:     
        F() {
            cout<<"t F";
        }
};
int main() {
    F obj;
}

输出为:

     A       B       C       D       E       A       B       F

我收到警告[警告]由于模糊性[默认启用],直接基地"B"在"F"中不可访问

我该如何更正??

您在以下声明中错过了virtual(请参阅Story Teller的评论):

class B: public virtual A {...};
class C: public virtual B {...};
class F: public virtual B, virtual E {...};

以下是演示:http://cpp.sh/6k2be