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

2021-07-03 18:57:35 字數 1518 閱讀 4957

c++學習筆記和總結

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

類的繼承和派生是相對來說的,派生類獲得基類的已有特性叫繼承,基類產生新類的過程叫派生。繼承的過程包含三個方面:1、吸收基類成員,基類成員中除了建構函式和析構函式,其他所有函式全部被接收(基類的建構函式和析構函式不能被派生類繼承);2、修改基類成員,(1)設定派生類宣告中的繼承方式,改變訪問屬性;(2)宣告和基類中資料或函式同名的成員,覆蓋相應的資料或函式;3、新增新成員。

派生類的宣告形式: class 派生類名:繼承方式1 類名1,繼承方式2 類名2,...,繼承方式n 類名n

基類的建構函式和析構函式派生類是不能繼承的,如果派生類需要對新成員初始化或者進行特定的清理工作,就需要自己定義

建構函式和析構函式

了。從基類繼承的成員的初始化仍可通過基類的建構函式來完成。使用派生類的物件以前需要對它的資料成員進行初始化賦值。派生類的資料成員包括從基類繼承來的資料成員和派生類新增的資料成員,還可能包括其他類的物件作為其資料成員,包括其他類的物件時實際上還間接包括了這些物件的資料成員。因此,對派生類初始化時就需要對基類的資料成員、派生類新增資料成員和內嵌的其他類物件的資料成員進行初始化。

基類的建構函式若有引數,則派生類必須定義建構函式,將傳入的引數再傳遞給基類的建構函式,對基類進行初始化

。若基類沒有定義建構函式,則派生類也可以不定義建構函式,都使用預設建構函式,對於派生類的新增資料成員可以通過其他的公有函式成員來初始化。而如果基類同時定義了預設建構函式和帶引數的建構函式,那麼在派生類的建構函式中可以給出基類名及其參數列,也可以不顯式給出。

構造派生類的物件呼叫建構函式時的處理順序是:1.首先呼叫基類的建構函式,若有多個基類,呼叫順序按照它們在派生類宣告時從左到右出現的順序;2.如果有內嵌物件成員,則呼叫內嵌物件成員的建構函式,若為多個內嵌物件,則按照它們在派生類中宣告的順序呼叫,如果無內嵌物件則跳過這一步;3.呼叫派生類建構函式中的語句。

程式說明:

程式執行結果如圖所示,由此可見宣告派生類的物件時呼叫派生類的建構函式,執行時先呼叫基類的建構函式,呼叫順序為在派生類宣告時它們從左到右出現的順序(base2,base1 base3);然後呼叫內嵌物件成員的建構函式,呼叫順序為它們在派生類中宣告的順序(base1,base3,base2)。

析構函式執行時所有成員或物件的清理順序與建構函式的構造順序剛好完全相反。

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

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

派生類建構函式和析構函式的構造規則

先給出程式 includeusing namespace std class first first int x,int y first void show 此時,系統自動呼叫基類的無參建構函式 若類沒有無參建構函式,則呼叫預設的建構函式 也可以顯式的指出具體呼叫基類的哪乙個建構函式,例如 thir...

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

派生類的建構函式的定義形式為 派生類名 派生類名 引數總表 基類名1 引數名錶1 基類名2 引數名錶2 基類名n 引數名錶n 成員物件名1 成員物件引數名錶1 成員物件名m 成員物件引數名錶m 所列出的成員物件名全部為新增成員物件的名字 本例只是為了演示派生類的定義與使用,盡可能顧及最常用的各方面。...