繼承中的構造函式呼叫順序

2021-06-21 13:52:08 字數 537 閱讀 4338

呼叫派生類的建構函式之前先呼叫基類的建構函式,析構函式則相反。因為派生類需要用到基類的成員,所以必須先有基類,再有派生類。

c++語法規定:

如果類沒有顯示定義建構函式,則編譯器提供乙個預設建構函式(不帶引數,僅建立物件,不初始化)。

如果類顯示定義了建構函式,編譯器一律不提供預設建構函式。即如果乙個類定義了乙個帶引數的建構函式,還想要無引數的建構函式,則必須自己定義。

例如:class animal

};class fish : public animal

};在不給基類新增無參的建構函式的前提下,要想編譯通過,需要如下定義派生類:

class fish : public animal

};這樣可以成功構造animal物件,便能夠成功夠構造fish。

另外還有一種解決辦法,就是給animal建構函式提供預設引數,為所有形參提供預設實參的建構函式就是乙個預設建構函式。

必須在建構函式初始化列表中進行初始化的型別(p388):

另一篇文章「繼承與建構函式」用乙個例子說明了類物件的初始化過程。

java繼承的構造函式呼叫順序

1 首先呼叫父類的無參建構函式 這個建構函式必定會被呼叫 2 呼叫子類的無參建構函式或帶引數的建構函式 例 1 宣告抽象類爺爺 father of abstractclass public abstract class father of abstractclass protected father...

繼承中的構造析構函式呼叫順序

子類建構函式必須對繼承的成員進行初始化 1.通過初始化列表或則賦值的方式進行初始化 子類無法訪問父類私有成員 2.呼叫父類建構函式進行初始化 2.1 隱式呼叫 子類在被建立時自動呼叫父類建構函式 只能呼叫父類的無參建構函式和使用預設引數的建構函式 2.2 顯示呼叫 在含參建構函式的初始化列表呼叫父類...

在繼承中構造器的呼叫順序

一.在繼承中構造器的呼叫順序 1.呼叫基礎類構造器。按著繼承順序,首先得到最底層的基礎類 根節點 然後是下乙個衍生類,直到最後的衍生類 葉子節點 2.按宣告順序低啊用成員初始化模組。3.呼叫衍生類構造器的主體。二.如下面的例子 class testa class testb class testc ...