1
我的代碼:存在中間階級的不執行參數化基類的構造
class Parent
{
public: Parent() { cout << "Default Parent" << endl; }
Parent(int x) { cout << "Parameterized Parent" << endl; }
};
class Child1: virtual public Parent
{
public: Child1() :Parent(10) { cout << "Default Child1" << endl; }
};
class Child2: virtual public Parent
{
public: Child2() :Parent(10) { cout << "Default Child1" << endl; }
};
class GrandChild: public Child1, public Child2
{
public:
GrandChild() { cout << "Default GrandChild" << endl; }
};
int main()
{
GrandChild G;
return 0;
}
輸出:
default Parent
default Child1
default Child2
default GrandChild
我知道這裏最派生類中調用父類的默認構造函數,除非另有規定。
但爲什麼ChildX類的參數化父構造函數調用從未得到執行?沒有ChildX類,GrandChild類不能存在(?)。沒有參數化調用,ChildX類將不會被創建(?)。
爲什麼不編譯器會給出關於忽略初始化一個警告? – InQusitive
@Inteusitive不值得警告; 「Child1」和「Child2」想要在派生類最多的時候初始化虛擬基地,而「GrandChild」想要以不同的方式進行初始化,沒有什麼明顯的錯誤。 – Brian
@Brian有一個特例:在抽象類中,該初始化器永遠不會被執行。 – curiousguy