為什麼呼叫基類的建構函式只能寫在初始化列表中?

2021-10-04 05:48:06 字數 298 閱讀 1306

為了確保呼叫派生類的建構函式的時候,已經呼叫過基類的某個建構函式,完成了派生類的繼承自基類部分的資料成員的初始化。即確保呼叫順序是:先呼叫基類的建構函式,再呼叫派生類的。

因為,呼叫派生類的建構函式時,可能會呼叫繼承自基類的函式。因此,呼叫派生類的建構函式時,必須確保繼承自基類的部分已構造完畢,而將基類建構函式的呼叫寫在初始化列表中,能更好地做到這一點。

另外,如果基類不存在預設建構函式,則派生類在進行建構函式的時候,必須將基類的建構函式寫在初始化列表中的,否則編譯不會通過。也就是說,在派生類進入建構函式之中以後,基類的建構函式預設已經是完成的了。

c 呼叫基類的建構函式(模板類)

如下 include include include using namespace std template class base template base base t n template void base tostring template derive derive t n base ...

基類構造函式呼叫虛函式的處理 之構造流程

當基類構造函式呼叫虛函式時,不會呼叫派生類的虛函式。現有基類a和派生類b,兩個類中有虛成員函式 test 程式剛進入b b時,在執行派生類b的建構函式時,需要首先呼叫基類a的建構函式。那麼呼叫的是哪個建構函式呢?根據派生類建構函式原理 這裡基類a有兩個建構函式a m 和 a int x m x 派生...

關於派生類建構函式與基類建構函式的呼叫順序問題

下面是實驗論證 程式7.3.1 程式 sequence.cpp 功能 演示繼承關係中基類與派生類的建構函式與析構函式的呼叫次序。include class base 析構函式 base class derived public base 析構函式 derived derived obj 宣告乙個派生...