派生類的建構函式和析構函式(C 學習筆記 32)

2021-09-02 21:25:32 字數 2568 閱讀 6459

引入繼承的目的:①派生類繼承了基類的成員,實現了原有**的重用。②實現**的擴充,只有在派生類中通過新增新的成員,加入新的功能,類的派生才有實際意義。

基類的建構函式和析構函式不能被繼承,在派生類中,如果對派生類新增的成員進行初始化,就需要加入派生類的建構函式,同時,對所有從基類繼承下來的成員的初始化工作,還是由基類的建構函式完成

通常,當建立派生類物件時,首先執行基類的建構函式,隨後執行派生類的建構函式;當撤銷派生類物件時,則先執行派生類的析構函式,隨後再執行基類的析構函式。析構函式的呼叫順序與建構函式的呼叫順序正好相反。

(1)簡單的派生類的建構函式

在c++中,派生類建構函式的一般格式為:

派生類名(引數總表):基類名(參數列)

例 1:當基類含有帶引數的建構函式,派生類建構函式的構造方法。

#include

#include

using

namespace std;

class

student

void

print()

};class

ustudent

:public student

void

print1()

};intmain()

說明:

① 在類的外部定義派生類的建構函式,在類體內只寫建構函式的宣告。

如,例 1 可以寫成:

ustudent(int num1,string name1,float score1,string major1);

而在類的外部定義派生類的建構函式:

ustudent(int num1,string name1,float score1,string major1):student(num1,name1,score1)
② 若基類使用預設建構函式或不帶引數的建構函式,則在派生類中定義建構函式時可略去「:基類建構函式名(參數列)」,此時若派生類不需要建構函式,則可不定義派生類建構函式。③ 當基類建構函式不帶引數時,派生類不一定需要定義建構函式,而當基類的建構函式哪怕只帶有乙個引數,它所有的派生類都必須定義建構函式,甚至所定義的派生類建構函式的函式體可能為空,僅僅起引數的傳遞作用。(2) 派生類的析構函式

在派生類中可以根據需要定義自己的析構函式,用來對派生類中的所增加的成員進行清理工作,基類的清理工作仍然由基類的析構函式負責。

在執行派生類的析構函式時,系統會自動呼叫基類的析構函式,對基類的物件進行清理。析構函式的呼叫順序與建構函式正好相反,先執行派生類的析構函式,再執行基類的析構函式。

(3)含有物件成員(子物件)的派生類的建構函式

當派生類中含有內嵌的物件成員(也稱子物件時),其建構函式的一般形式為:

派生類名(引數總表):基類名(參數列 0), 物件成員名 1(參數列 1), ···, 物件成員名 n(參數列 n)

可參考類的組合:

在定義派生類物件時,建構函式的執行順序如下:

① 呼叫基類的建構函式,對基類資料成員初始化;

② 呼叫內嵌物件成員的建構函式,對內嵌物件成員的資料成員初始化;

③ 執行派生類的建構函式體,對派生類資料成員初始化。

例 2:含有物件成員的派生類建構函式和析構函式的執行順序

#include

using

namespace std;

class

base

~base()

void

show()

};class

derived

:public base

~derived()

};intmain()

例 3:含有多個物件成員的派生類建構函式的執行順序
#include

#include

using

namespace std;

class

student

void

print()

};class

ustudent

:public student

void

print()

void

print_auditor1()

void

print_auditor2()

};intmain()

執行結果:

呼叫內嵌物件成員建構函式的順序由它們在類中宣告的順序確定。 在本例中有兩個內嵌物件成員,雖然在派生類建構函式首部,內嵌物件成員 auditor2 的建構函式寫在 auditor1 的前面,但是呼叫順序還是先執行 auditor1 的建構函式。

如果派生類的基類也是乙個派生類,每個派生類只需負責其直接基類資料成員的初始化,依次上溯。

派生類的建構函式和析構函式

c 學習筆記和總結 這段時間看了c 中類的繼承和派生,這應該算是c 和c語言相比最主要的乙個知識點了。不得不說類的功能是十分強大的,它定義了public,protected,private三種訪問內部成員的訪問許可權,增加了程式的安全性和保護性。通過定義類的物件可以訪問類的成員,但是定義物件是外部訪...

派生類的建構函式和析構函式

一.簡單派生類的析構函式和建構函式。1.簡單派生類建構函式的定義形式 派生類建構函式名 總參數列列 基類建構函式名 參數列列 其中,總參數列列中的引數包括派生類引數和基類引數,且基類引數放在最前面。參數列列裡中只有引數名,沒有引數型別。2.注意簡單派生類建構函式的定義形式中,中間有乙個冒號。3.參數...

C 派生類的構造和析構函式

派生類的目的是為了發展,派生類繼承了積累的成員,實現了原有 的重用,這只是一部分 而 的擴充才是最主要的,只有通過新增新的成員,加入新的功能,類的派生才有實際意義。派生類的建構函式只負責對新增的成員進行初始化,對所有從基類 繼承來的成員,其初始化工作還是由基類的建構函式完成。同樣,對派生類物件的掃尾...