一卖子、基類或父類
派生類或子類
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)當創(chuàng)建派生類對象時
? ? ? 基類的構(gòu)造函數(shù)——>派生類的構(gòu)造函數(shù)
(2)當撤消派生類對象時
? ? ? 派生類的析構(gòu)函數(shù)——>基類的析構(gòu)函數(shù)
三咱圆、調(diào)整基類成員在派生類中的訪問屬性的其他方法
如果在派生類中定義了與基類成員同名的成員,則派生類成員覆蓋了基類的同名成員
問題的提出:
? 能否使私有繼承的派生類的對象訪問基類的公有成員或保護成員。
解決方法1 :通過公有成員函數(shù)間接訪問
解決方法2:使用訪問聲明
注:
(1)訪問聲明中只能含不帶類型和參數(shù)的函數(shù)名或變量名。
(2)數(shù)據(jù)成員也可以使用訪問聲明
(3)訪問聲明不能改變類成員在基類中原來的性質(zhì)
(4)對于基類中的重載函數(shù)使用訪問聲明時要慎重
四序苏、多重繼承
當一個派生類具有多個基類時手幢,這種派生方法稱為多重派生或多重繼承。
易存在二義性
使用成員名限定可以消除二義性忱详,例如:
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)存中就只擁有一個拷貝]
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ù)時可以用派生類對象作為實參吕座。