派生類的建構函式

2021-08-02 07:20:44 字數 1880 閱讀 9620

派生類繼承了基類的資料成員,所以派生類的建構函式中不僅要初始化派生類所增加的資料成員,還要 初始化基類中的資料成員。因此在執行派生類的建構函式時,應該呼叫基類的建構函式。具體的形式如下:

派生類建構函式名(總形式引數表列):基類建構函式名(實際參數列列)

舉個例子:

student1(int n,string nam,char s,int a,string ad):student(n,nam,s),age(a),addr(ad){}

上面的呼叫建構函式也是在初始化參數列列中執行的。

對於派生類中增加的成員資料的初始化也可以不再初始化表中進行初始化,而是在函式體中進行。

student1(int n,string name,char s,int a,string ad):student(n,nam,s)

需要注意的是基類中的資料的初始化只能在初始化表中進行,而不能再函式體中用賦值語句來初始化;而且在初始化表中進行的時候只能通過呼叫建構函式來進行,而不能通過賦值來初始化。

建構函式的執行順序:

派生類建構函式先呼叫基類建構函式;

再執行派生類建構函式本身(即派生類建構函式的函式體)。

舉個例子如下:

class base

舉個例子:

student1 (int n,string name,int n1,string nam1,int a,string ad):

student(n,nam),monitor(n1,nam),age(a),addr(ad){}

執行建構函式的順序:

1. 基類的建構函式

2. 子物件的建構函式

3. 其他資料成員初始化

多層派生的建構函式:

每一層的派生類只會呼叫上一層的直接的建構函式。不關心任何其他的包括上上層基類的建構函式。

一些特殊的規則:

基類中沒有定義建構函式,或者定義了沒有引數的建構函式:

在派生類建構函式中可不寫呼叫基類建構函式的語句,呼叫派生類建構函式時系統會自動呼叫基類的預設建構函式。

基類或子物件型別的宣告中定義了帶引數的建構函式:

必須顯示地定義派生類的建構函式,並在派生類建構函式中寫出基類或子物件型別的建構函式及參數列。

基類中既定義無引數的建構函式,又過載了有引數的建構函式:

派生類建構函式中可以寫明呼叫帶引數的基類建構函式,也可以不寫呼叫基類的建構函式。

綜上,子物件初始化以及對基類建構函式的呼叫只能寫在初始化引數列表中,不能寫在函式體內。

派生類建構函式

1 建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員。像任何類一樣,如果類不定義自己的預設建構函式和複製控制成員,就將使用合成版本。2 派生類的合成預設建構函式除了初始化派生類的資料成員之外,它還初始化派生類物件的基類部分。基類部分由基類的預設建構函式初始化。3 派生類建構函式...

派生類 建構函式

在hpp標頭檔案中,宣告建構函式中,必須為新增的資料成員和基類的資料成員提供資料,即每乙個形參代表乙個成員 派生類宣告建構函式入下,其中r是給新增的資料,後面是基類的成員。在cpp檔案定義的時候,必須建立基類的物件,即如果不是預設的物件,則必須顯示的建立基類的物件,將資料傳遞給基類的物件 如下圖 t...

派生類的建構函式

派生類的資料成員由所有基類的資料成員與派生類新增的資料成員共同組成,如果派生類新增成員中包括其他類的物件 子物件 派生類的資料成員中實際上還間接包括了這些物件的資料成員。因此,構造派生類的物件時,必須對基類資料成員 新增資料成員和成員物件的資料成員進行初始化。派生類的建構函式必須要以合適的初值作為引...