2017-04-05 41 views
-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 

任何一个可以解释我的偏差?

+0

因为这就是虚拟基类的意思。它们只在超类链中出现过一次。 – EJP

+0

为什么在第一种情况下它是在默认情况下而不是在param中? – unixlover

+0

虚拟类是多路径继承的特例,它避免了来自同一基类的重复数据。 – rsp

回答