亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么對ChildLabourer初始化列表不能寫成這樣?ChildLabourer(string name, int age):m_strName(name),m_iAge(age)

既然都公有繼承了父類,那么子類就應該可以對父類數據成員m_strName和m_iAge進行初始化列表呀,為什么還得用父類的構造函數進行初始化列表 ChildLabourer(string name, int age):Worker(name),Children(age) ???

代碼如下:

class?ChildLabourer?:?public?Worker,public?Children
{
public:
ChildLabourer(string?name,?int?age):m_strName(name),m_iAge(age)
{
cout?<<?"ChildLabourer"?<<?endl;
}

~ChildLabourer()
{
cout?<<?"~ChildLabourer"?<<?endl;
}
};


正在回答

2 回答

編譯器給出的提示是ChildLabourer類沒有m_strName和m_iAge成員變量。

推測是子類的初始化列表先于父類的構造函數執行,否則無法將參數傳遞給父類。因此在執行ChildLabourer的初始化列表時,父類(Worker, Children)的構造方法尚未執行,當然成員變量(m_strName, m_iAge)也就不存在,因此不能在子類的初始化列表中初始化父類的成員變量。

0 回復 有任何疑惑可以回復我~

回答的不錯,我覺著還有點需要補充。實例化子類對象時,需要先實例化父類的對象,因為父類沒有默認構造函數,所以必須得給父類構造函數傳參,后面就是樓主所說的了:初始化列表是早于構造函數運行的,早于父類子類的構造函數。如果父類有默認構造函數的話,就不需要傳參了。如果要傳參,只能先實例化父類對象,也就是在初始化列表中一步完成實例化,后面也就用再實例化了。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之繼承篇
  • 參與學習       75192    人
  • 解答問題       251    個

繼承,C++面向對象三大特征之一,通過編碼實踐方式講解到操作層面

進入課程

為什么對ChildLabourer初始化列表不能寫成這樣?ChildLabourer(string name, int age):m_strName(name),m_iAge(age)

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號