-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