-1
我有以下结构违抗作为偏差与虚拟关键字
struct A{
string s;
A() {
cout<<"in a default\n";
}
A(string t): s(t) {
cout<<"in a param \n";
}
};
struct B: virtual public A{
B(): A("B"){
cout<<"in b\n";
}
};
struct C: virtual public A {};
struct D: public B, public C {};
int main()
{
D d;
}
在C和B A作为虚基类,输出如下
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
任何一个可以解释我的偏差?
因为这就是虚拟基类的意思。它们只在超类链中出现过一次。 – EJP
为什么在第一种情况下它是在默认情况下而不是在param中? – unixlover
虚拟类是多路径继承的特例,它避免了来自同一基类的重复数据。 – rsp