C++子類初始化父類的構造函數調用總結

我們知道,構造方法是用來初始化類對象的。如果在類中沒有顯式地聲明構造函數,那麼編譯器會自動創建一個默認的構造函數;並且這個默認的構造函數僅僅在沒有顯式地聲明構造函數的情況下才會被創建。

構造函數與父類的其它成員(成員變量和成員方法)不同,它不能被子類繼承。因此,在創建子類對象時,爲了初始化從父類中繼承來的成員變量,編譯器需要調用其父類的構造函數。如果子類的構造函數沒有顯示地調用父類的構造函數,則默認調用父類的無參構造函數,至於什麼事顯式調用,在下面會詳細說明!關於子類中構造函數的構造原則

1.父類沒有聲明構造函數
(1)子類也沒有聲明自己的構造函數,則父類和子類均由編譯器生成默認的構造函數。
(2)子類中聲明瞭構造函數(無參或者帶參),則子類的構造函數可以寫成任何形式,不用顧忌父類的構造函數。在創建子類對象時,先調用父類默認的構造函數(編譯器自動生成),再調用子類的構造函數。

2.父類只聲明瞭無參構造函數
如果子類的構造函數沒有顯式地調用父類的構造,則將會調用父類的無參構造函數。也就是說,父類的無參構造函數將會被隱式地調用。

3.父類只聲明瞭帶參構造函數

  • 在這種情況下,要特別注意。因爲父類只有帶參的構造函數,所以如果子類中的構造函數沒有顯示地調用父類的帶參構造函數,則會報錯,所以必需顯示地調用。關於構造函數的顯示調用。
  • 若父類中有所有參數帶默認參數的構造函數,那麼這個構造函數可以頂替無參拷貝作爲默認調用的構造函數

4.父類同時聲明瞭無參和帶參構造函數
在這種情況下,子類只需要實現父類的一個構造函數即可,不管是無參的還是帶參的構造函數。如果子類的構造函數沒有顯示地調用父類的構造函數(無參或帶參),則默認調用父類的無參構造函數。

總結以上幾條,可以歸納出C++中子類繼承父類時構造函數的寫法的規律:當父類有顯式地聲明瞭構造函數時,子類最低限度的實現父類中的一個;當父類沒有聲明構造函數時,子類可以不聲明構造函數或者任意地書寫構造函數。

詳見博客:https://blog.csdn.net/sevenjoin/article/details/82222895

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章