虚拟关键字的偏差

Deviation with virtual keyword

本文关键字:关键字 虚拟      更新时间:2023-10-16

>我有以下结构

struct A{
    string s;
    A() {
        cout<<"in a defaultn";
    }
    A(string t): s(t) {
        cout<<"in a param n";
    }
};
struct B: virtual public A{
    B(): A("B"){
        cout<<"in bn";
    }
};
struct C: virtual public A {};
struct D: public B, public C {};
int main()
{
D d;
}

以 A 作为 C 和 B 中的虚拟基类,输出如下

in a default
in b 

仅以 A 作为 B 的虚拟基类,输出如下

in a default
in b
in a default

以 A 作为仅 C 的虚拟基类,输出如下

in a default
in a param 
in b

并且没有虚拟基类,输出如下

in a param 
in b
in a default

谁能解释一下我的偏差?

虚拟继承是为了解决所谓的"死亡之钻">

总之,问题是,如果你调用 D::[A 中的某个函数],它会选择哪个 A - 来自 B 的那个,还是来自 C 的那个,或者分离存在没有意义?

您可以在此处阅读有关该问题的更多信息。https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem