第四章 派生類與繼承

一、基類或父類

派生類或子類

1、繼承方式有三種:public private protected

默認的是private

2、派生類對基類成員的訪問形式:

????(1)內(nèi)部訪問:由派生類中新增加的成員函數(shù)對從基類繼承來的成員的訪問

????(2)對象訪問:在派生類的外部,通過派生類的對象對從基類繼承來的成員的訪問

小結(jié):

protected[基類成員內(nèi)型]——public[派生類繼承方式]——protected

public[基類成員內(nèi)型]——protected[派生類繼承方式]——protected

對于基類的私有成員:可以通過基類提供的公有成員函數(shù)訪問


二、派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)

1、執(zhí)行順序

(1)當(dāng)創(chuàng)建派生類對象時

? ? ? 基類的構(gòu)造函數(shù)——>派生類的構(gòu)造函數(shù)

(2)當(dāng)撤消派生類對象時

? ? ? 派生類的析構(gòu)函數(shù)——>基類的析構(gòu)函數(shù)

若所定義的派生類構(gòu)造函數(shù)的函數(shù)體為空,僅僅起參數(shù)的傳遞作用

三、調(diào)整基類成員在派生類中的訪問屬性的其他方法

如果在派生類中定義了與基類成員同名的成員,則派生類成員覆蓋了基類的同名成員

問題的提出:

? 能否使私有繼承的派生類的對象訪問基類的公有成員或保護成員。

解決方法1 :通過公有成員函數(shù)間接訪問

解決方法2:使用訪問聲明

注:

(1)訪問聲明中只能含不帶類型和參數(shù)的函數(shù)名或變量名。

(2)數(shù)據(jù)成員也可以使用訪問聲明

(3)訪問聲明不能改變類成員在基類中原來的性質(zhì)

(4)對于基類中的重載函數(shù)使用訪問聲明時要慎重

四、多重繼承

當(dāng)一個派生類具有多個基類時,這種派生方法稱為多重派生多重繼承。

易存在二義性

使用成員名限定可以消除二義性,例如:

obj.X∷f();//調(diào)用類X的f()

obj.Y∷f();//調(diào)用類Y的f()

五、虛基類

為什么要引入虛基類?

如果一個派生類是從多個基類派生出來的,而這些基類又有一個共同的基類,

則在這個派生類中訪問這個共同的基類中的成員時,可能會產(chǎn)生二義性。

解決辦法2:

為了解決這種二義性,使從不同的路徑繼承的基類的成員在內(nèi)存中只擁有一個拷貝,引入了虛基類的概念。[?如果將公共基類說明為虛基類。那么,對同一個虛基類的構(gòu)造函數(shù)只調(diào)用一次(第一次出現(xiàn)的時候調(diào)用),這樣從不同的路徑繼承的虛基類的成員在內(nèi)存中就只擁有一個拷貝]

構(gòu)造函數(shù)執(zhí)行順序:B()-> B1()-> B()-> B2()-> D()? 引入虛基類后: B()-> B1()-> B2()-> D()

class 派生類名:繼承方式 virtual 基類名

{? … }

class? 派生類名: virtual 繼承方式 基類名

{? … }

引入虛基類的用意


六、基類與派生類對象之間的賦值兼容關(guān)系

(1) 可以用派生類對象給基類對象賦值

例如:

Base b;? ? ? //定義基類Base的對象b

Derived d;? //定義公有派生類Derived的對象d

b=d;//對象b中數(shù)據(jù)成員將具有對象d中對應(yīng)數(shù)據(jù)成員的值。

說明:所謂賦值僅僅指對基類的數(shù)據(jù)成員賦值。

(2) 可以用派生類對象來初始化基類對象的引用。

? 例如:

? Base b;? ? ? ? ? //定義基類Base的對象b

? Derived d;? ? ? ?//定義基類Base的公有派生類

? Base& br=d;?? //Derived的對象d , 定義基類Base的對象的引用br,并用派生類Derived的對象d對其初始化

(3) 派生類對象的地址可以賦給指向基類對象的指針

? 例如:

? Derived d;? ? //定義基類Base的公有派生類

? Base* bp=&d;? //Derived的對象d?

把派生類對象的地址&d賦值給指向基類的指針bp,也就是說,使指向基類對象的指針bp指向派生類對象d。

(4) 如果函數(shù)的形參是基類對象或基類對象的引用,在調(diào)用函數(shù)時可以用派生類對象作為實參。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容