我遇到過這個讓我困惑的問題。複雜的構建順序 - 涉及虛擬繼承
這個代碼是:
struct B1 { B1(){std::cout << "B1\n";} };
struct V1 : public B1 { V1(){std::cout << "V1\n";} };
struct D1 : virtual public V1 {D1(){std::cout << "D1\n";} };
struct B2 {B2(){std::cout << "B2\n";} };
struct B3 {B3(){std::cout << "B3\n";} };
struct V2 : public B1, public B2 {V2(){std::cout << "V2\n";} };
struct D2 : public B3, virtual public V2 {D2(){std::cout << "D2\n";} };
struct X : public D1, public D2 { };
問:什麼是建築X的順序?
這裏是我與簡化IT
首先,我想回答這個事實,認爲沒有虛繼承這個問題的目的是構建一個圖。關鍵字virtual
被public
代替我會得到
B1,V1,D1, [B3,B1,B2,V2,D2] , X
但是我不知道,當虛擬繼承走來我會如何處理這個問題。它提到的代碼。我讀到它的解決方法完全一樣,但virtual bases優先。這裏有哪些虛擬基地?有關如何解決這個問題的任何建議?
該圖不正確,兩個'B1'實例是分開的。 – 2014-09-24 05:58:14
我不確定如果'V1'是'虛擬公共B1'但是'V2'是(非虛擬)'public B1',會發生什麼情況! – 2014-09-24 05:59:46
@MattMcNabb虛擬的虛擬構建器實際上由'X'的構造器構造,非虛擬構造器通過V2的構造器非虛擬構造;你最終得到兩個'B1'子對象。 – 2014-09-24 06:55:34