根據書上所說,虛繼承後由第二級派生類對底層的基類進行構造,而第一級派生類不對底層基類進行構造,所以需要加上base(i);
派生類構造時先對基類進行構造,所以是按照(base),(base1,base2),(mem1,mem2)的順序構造的;
因為繼承時public base2, public base1 base2在base1前面,所以先構造base2;
因為定義時base2 mem2;
base1 mem1;先定義的base2所以先構造base2;
#includeusing namespace std;
class base
~base(){}
};class base1 :virtual public base
~base1(){}
};class base2 :virtual public base
~base2(){}
};class derived :public base2, public base1
private:
base2 mem2;
base1 mem1;
};int main()
Java繼承構造執行順序
package test public class father public father package test public class son extends father public son public son int s public static void main string...
C 中多重繼承建構函式執行順序
1 1 include 2 include 3 4using namespace std 56 classa11 12 classb17 18 class c public b,publica24 25 intmain 輸出 b ac 分析 多重繼承與單繼承類似,也是先執行基類建構函式。多個基類之間...
C 類的繼承中,建構函式的執行順序
先看下邊的程式 class a public a string a public virtual void printfields class b a public override void printfields y x,y 如果執行 b b new b a 會輸出x 1,y 0.因為在例項化子...