考慮下面的以下示例代碼:派生類對象是否包含基類對象?
#include <iostream>
using namespace std;
class base
{
public:
base()
{
cout << "ctor in base class\n";
}
};
class derived1 : public base
{
public:
derived1()
{
cout <<"ctor in derived class\n";
}
};
int main()
{
derived1 d1obj;
return 0;
}
問題
當創建
d1obj
,該構造函數中推導的順序調用:基類構造函數被稱爲第一,然後將派生類構造函數。這樣做是因爲以下原因:In-order to construct the derived class object the base class object needs to be constructed first
?d1obj
是否包含基類對象?
我加入一個問題
3)當創建d1obj,控制第一達到基類的構造,然後將其轉移到派生類的構造?或者它是相反的:它首先到達派生類的構造函數,發現它有基類,因此控制權轉到基類的構造函數中?
任何基本的C++常見問題解答或書籍都將回答這些問題 –
問問題內容問題而不是決策問題可能更有用。 –
你應該習慣在派生類中顯式調用父類的ctor。假設基地沒有提供默認的Ctor,那麼這個代碼就不會編譯。但是如果您在派生類的初始化程序列表中調用非默認ctor,它就會失敗。 – danca