C 子類初始化父類的構造函式呼叫總結

2021-09-10 08:53:03 字數 785 閱讀 6672

我們知道,構造方法是用來初始化類物件的。如果在類中沒有顯式地宣告建構函式,那麼編譯器會自動建立乙個預設的建構函式;並且這個預設的建構函式僅僅在沒有顯式地宣告建構函式的情況下才會被建立。

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

1.父類沒有宣告建構函式

(1)子類也沒有宣告自己的建構函式,則父類和子類均由編譯器生成預設的建構函式。

(2)子類中宣告了建構函式(無參或者帶參),則子類的建構函式可以寫成任何形式,不用顧忌父類的建構函式。在建立子類物件時,先呼叫父類預設的建構函式(編譯器自動生成),再呼叫子類的建構函式。

2.父類只宣告了無參建構函式

如果子類的建構函式沒有顯式地呼叫父類的構造,則將會呼叫父類的無參建構函式。也就是說,父類的無參建構函式將會被隱式地呼叫。

3.父類只宣告了帶參建構函式

4.父類同時宣告了無參和帶參建構函式

在這種情況下,子類只需要實現父類的乙個建構函式即可,不管是無參的還是帶參的建構函式。如果子類的建構函式沒有顯示地呼叫父類的建構函式(無參或帶參),則預設呼叫父類的無參建構函式。

總結以上幾條,可以歸納出c++中子類繼承父類時建構函式的寫法的規律:當父類有顯式地宣告了建構函式時,子類最低限度的實現父類中的乙個;當父類沒有宣告建構函式時,子類可以不宣告建構函式或者任意地書寫建構函式。

詳見部落格:

c 子類建構函式初始化及父類構造初始化

我們知道,構造方法是用來初始化類物件的。如果在類中沒有顯式地宣告建構函式,那麼編譯器會自動建立乙個預設的建構函式 並且這個預設的建構函式僅僅在沒有顯式地宣告建構函式的情況下才會被建立建立。1.父類沒有宣告建構函式 1 子類也沒有宣告自己的建構函式,則父類和子類均由編譯器生成預設的建構函式。2 子類中...

初始化列表呼叫子類建構函式

includeusing namespace std class a a是父類 a int x a x 帶 引數的建構函式對a 初始化 void printa class b public a b 是子類 void printb int main 如果在子類的建構函式中需要初始化父類的private...

C 類建構函式初始化列表,子類向父類傳引數

c 類建構函式初始化列表 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 cexample 建構函式內部賦值 cexample 上面的例子中兩個建構函式的結果是一樣的。上面的建構函式 使用初始化列表的建構函式 顯式的初始化類的成員 ...