先執行基類的構造函數,並不是以構造函數的初始化列表爲準,而是以聲明構造函數時基類的順序爲準。再執行成員對象的構造函數,最後執行派生類的構造函數。
例子:
class Derived :public Base2, public Base1, public Base3 //聲明基類{
public:
Derived(int i, int j, int k, int l);
void Print();
private:
int d;
Member men;
};
Derived::Derived(int i, int j, int k, int l) :Base1(i), Base2(j), men(k) //構造函數的初始化列表
{
d = l;
cout << "派生類的構造函數被調用 " << endl;
}
Derived obj(1, 2, 3, 4);
則調用順序爲:
Base2的構造函數被調用Base1的構造函數被調用
Base3缺省的構造函數被調用。
派生類的析構函數調用:
首先對派生類新增普通成員進行清理,然後調用成員對象析構函數,最後調用基類的虛構函數。