一、基類或父類
派生類或子類
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ù)


三、調(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)存中就只擁有一個拷貝]

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ù)時可以用派生類對象作為實參。