繼承與派生(二)

2021-07-26 17:47:30 字數 1033 閱讀 7399

一、有子物件的派生類的構造

子物件:類的資料成員中包含的類的物件

派生類建構函式的任務

對基類資料成員的初始化

對子物件資料成員的初始化

對派生類資料成員的初始化

派生類建構函式的一般形式

派生類建構函式名(總參數列列):基類建構函式名(參數列列),

子物件名(參數列列)

二、有子物件的派生類的構造

派生類建構函式的執行順序

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

呼叫子物件建構函式,對子物件資料成員初始化

執行建構函式本身,對派生類資料成員初始化

三、多層派生時的建構函式

派生類的建構函式只需寫出其直接基類的建構函式

初始化順序

先初始化基類student的資料成員num和name

再初始化student1的資料成員age

最後初始化student2的資料成員score

四、派生類建構函式的特殊形式

當不需要對派生類的新增成員進行任何初始化操作時,派生類建構函式的函式體可以為空

如果在基類中沒有定義建構函式,或定義了沒有引數的建構函式,則在定義派生類建構函式時可以不寫基類的建構函式

如果在基類和子物件型別的宣告中都沒有定義帶引數的建構函式,而且也不需要對派生類自己的資料成員初始化,則可以不必顯式地定義派生類建構函式

五、派生類建構函式的特殊形式

如果在基類或子物件型別的定義中都定義了帶引數的建構函式,則必須顯式地定義派生類的建構函式,並在派生類建構函式中寫出基類或子物件的建構函式及其參數列

如果在基類中既定義了無參的建構函式,又定義了有參的建構函式,則在定義派生類的建構函式時,既可以包含基類建構函式及其引數,也可以不包含基類建構函式

六、派生類的析構函式

析構函式也不被繼承,派生類自行宣告

宣告方法與一般(無繼承關係時)類的析構函式相同

不需要顯式地呼叫基類或子物件的析構函式,系統會自動隱式呼叫

析構函式的呼叫次序與建構函式相反

C 繼承與派生(二)

呼叫基類的建構函式,呼叫順序按照他們被繼承時宣告的順序從做到又繼承。執行結果如下 看到了沒,多個基類建構函式的執行順序是由最開始的繼承列表中的宣告順序決定的 class derived public base2,public base1,public base3另外,我們也可以看到,派生類中的成員變...

派生與繼承 多重派生

1 理解下面的程式,並在 vc 6.0 下執行檢視結果,回答程式後面的問題。class cbase1 cbase1 void print protected int a class cbase2 cbase2 void print protected int b class cderive publ...

繼承與派生

實驗內容 建立乙個基類,兩個派生類,讓每乙個派生類都包含乙個函式area 分別用來返回矩形和三角形的面積。用建構函式對height和width進行初始化。要求通過基類指標訪問虛函式的方法。純虛函式 virtual double area 0 純虛函式的作用是在基類中為派生類保留乙個函式的名字,以便派...