面向物件程式設計有4個主要特點:抽象、封裝、繼承和多型性,本章主要介紹有關繼承的知識,多型性將在后續章節中講解,
繼承性是面向物件程式設計最重要的特征,可以說,如果沒有掌握繼承性,就等于沒有掌握類和物件的精華,就是沒有掌握面向物件程式設計的真諦,
繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等,
? 繼承關系舉例
萬事萬物中皆有繼承,是重要的現象,
案例:植物繼承圖

傳遞性:高等植物,蕨類植物,苔蘚都是植物,具有植物的共同特征,
不對稱性:不是所有植物都屬于菌類,
繼承是類之間定義的一種重要關系
一個B類繼承A類,或者說從A類派生B類;那么A類稱為基類(父類),B類稱為派生類(子類),像父子關系一樣,

has-A:類的組合;use-A:友元類,做函式引數傳遞;is-A:繼承,
? 派生類的定義
1、類繼承關系的語法
class 派生類名:基類名串列
{
//成員變數和成員函式宣告...
}
2、基類名串列:
訪問限定符 基類名1,訪問限定符 基類名2...
3、訪問限定符表示派生類對基類的繼承方式,使用關鍵字:
? public 公有繼承
? private 私有繼承
? protected 保護繼承
派生類繼承了基類的全部成員變數和成員方法(除了構造和析構之外的成員方法),但是這些成員的訪問屬性,在派生程序中是可以調整的,
? 繼承重要說明和示例
說明:
1、子類擁有父類的所有成員變數和成員函式;
2、子類可以擁有父類沒有的方法和屬性;
3、子類就是一種特殊的父類;
4、子類物件可以當作父類物件使用(在父類做函式形參時,可以傳子類物件),
實體:

? 派生類的訪問控制
1、不同的繼承方式會改變繼承成員的訪問屬性
public繼承:父類成員在子類中保持原有訪問級別;
private繼承:父類成員在子類中變為private成員;
protected繼承:父類中public成員會變成protected,
父類中protected成員仍然為protected;父類中private成員仍然為private
2、private成員在子類中依然存在,但是卻無法訪問到,不論種方式繼承,派生類都不能直接使用基類的私有成員 ,(可以通過提供介面訪問)

類的繼承方式會影響父類的屬性在子類中的訪問權限,
? 能否被訪問、繼承方式選擇
1、如何判斷成員是否能被訪問:“三看”原則
1> 看呼叫陳述句,是再寫在子類的內部還是外部;
2> 看子類如何從父類繼承;
3> 看父類訪問級別,
2、派生類類成員訪問級別設定的原則
思考:如何恰當的使用public,protected和private為成員宣告訪問級別?
1> 需要被外界訪問的成員直接設定為public;
2> 只能在當前類中訪問的成員設定為private;
3> 只能在當前類和子類中訪問的成員設定為protected,protected成員的訪問權限介于public和private之間,
PS:一般情況下,均使用public繼承方式,
? 型別兼容性原則
型別兼容規則是指在需要基類物件的任何地方,都可以使用公有派生類的物件來替代,
通過公有繼承,派生類得到了基類中除建構式、解構式之外的所有成員,這樣,公有派生類實際就具備了基類的所有功能,凡是基類能解決的問題,公有派生類都可以解決,
型別兼容規則中所指的替代包括以下情況:
? 子類物件可以當作父類物件使用
? 子類物件可以直接賦值給父類物件
? 子類物件可以直接初始化父類物件
? 父類指標可以直接指向子類物件
? 父類參考可以直接參考子類物件
在替代之后,派生類物件就可以作為基類的物件使用,但是只能使用從基類繼承的成員,
型別兼容規則是多型性的重要基礎之一,
總結:子類就是特殊的父類,
? 繼承中的構造和析構
1、問題:子類如何初始化父類成員?父類與子類的建構式有什么關系?
☆ 在子類物件構造時,需要呼叫父類建構式對其繼承得來的成員進行初始化,
☆ 在子類物件析構時,需要呼叫父類解構式對其繼承得來的成員進行清理,


2、繼承中的構造析構呼叫原則
☆ 子類物件在創建時會首先呼叫父類的建構式;
☆ 父類建構式執行結束后,執行子類的建構式;
☆ 當父類的建構式有引數時,需要在子類的初始化串列中顯示呼叫;
☆ 解構式呼叫的先后順序與建構式相反,

? 繼承中同名成員處理方法
1、當子類成員變數與父類成員變數同名時,子類依然從父類繼承同名成員
2、在子類中通過作用域分辨符::進行同名成員區分(在派生類中使用基類的同名成員,顯式地使用類名限定符)
3、同名成員存盤在記憶體中的不同位置

總結:同名成員變數和成員函式通過作用域分辨符進行區分,
? 繼承中的static成員
繼承和static關鍵字在一起會產生什么現象?
? 基類定義的靜態成員,將被所有派生類共享
? 派生類中訪問靜態成員,用以下形式顯式說明:

接下來的內容

? 多繼承
派生類只有一個基類,稱為單繼承(Single Inheritance),除此之外,C++也支持多繼承(Multiple Inheritance),即一個派生類可以有兩個或多個基類,
多繼承容易讓代碼邏輯復雜、思路混亂,一直備受爭議,后來的 Java、C#、PHP 等干脆取消了多繼承,

? 多繼承的二義性
如果一個派生類從多個基類派生,而這些基類又有一個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性,
為了解決多繼承時的命名沖突和冗余資料問題,C++ 提出了虛繼承,使得在派生類中只保留一份間接基類的成員,
使用關鍵字Virtual:

好啦,今天的學習就到此為止吧~明天繼續~

最后,不管你是轉行也好,初學也罷,進階也可,如果你想學編程~
【值得關注】我的 C/C++編程學習交流俱樂部!【點擊進入】
問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/249288.html
標籤:C++
上一篇:孫類繼承出問題
