我用虛擬繼承編寫了這個程序,我有幾個問題。虛擬繼承在這種情況下的行爲
#include<iostream>
using namespace std;
class B1
{
public:
B1()
{
cout << "In B1 constructor\n";
}
};
class V1 : public B1
{
public:
V1()
{
cout << "In V1 constructor\n";
}
};
class D1 : virtual public V1
{
public:
D1()
{
cout << "In D1 constructor\n";
}
};
class B2
{
public:
B2()
{
cout << "In B2 constructor\n";
}
};
class B3 {
public:
B3()
{
cout << "In B3 constructor\n";
}
};
class V2 : public B1, public B2
{
public:
V2()
{
cout << "In V2 constructor\n";
}
};
class D2 : public B3, virtual public V2
{
public:
D2()
{
cout << "In D2 constructor\n";
}
};
class X : public D1, virtual public D2
{
public:
X()
{
cout << "In X constructor\n";
}
};
int main()
{
X x;
return 0;
}
輸出的程序:
In B1 constructor
In V1 constructor
In B1 constructor
In B2 constructor
In V2 constructor
In B3 constructor
In D2 constructor
In D1 constructor
In X constructor
我預期這樣的輸出:
In B1 constructor
In B2 constructor
In V2 constructor
In B2 constructor
In D2 constructor
In B1 constructor
In V1 constructor
In D1 constructor
In X constructor
的基礎上,一個虛擬基類的一個對象被構造第一和然後其他基類對象。有人可以解釋這種行爲嗎?
什麼編譯/版本? – 2012-04-24 19:08:42
擁抱?你想要一個'B2'子對象被構造兩次??? – curiousguy 2012-07-29 04:53:20