雖然已經考完了,但既然開了篇,就要寫完。
第二章:繼承與派生
1.基本概念
- 繼承,指建立一個新的類,新類從一個或多個已定義的幾類中繼承屬性(數據成員)和行爲(函數成員),並可以重新定義或添加新的屬性和行爲,從而建立類的層次結構。繼承是實現軟件重用的一種方法。
- 繼承可以分爲單一繼承和多重繼承。單一繼承是一個派生類只從一個基類派生,多重繼承是一個派生類從多個基類派生。
- 繼承方式有private,protected和public三種,不同的繼承方式下,派生類繼承的父類成員的訪問權限不同。默認繼承方式是private。
- 派生類中重寫的函數會屏蔽基類中的同名函數。
class A { //類內容 }; class B{ //類內容 } class C:public A, private B { //繼承A、B中的數據成員和函數並加上自己的內容 }
2.類的繼承方式
- 公有繼承(public)
關於基類中成員的訪問權限 基類 派生類 外部 public public不變 可訪問 protected protected不變 不可訪問 private 不可訪問 不可訪問
- 私有繼承(private)
關於基類中成員的訪問權限 基類 派生類 外部 public private 不可訪問 protected private 不可訪問 private 不可訪問 不可訪問
- 保護繼承(protected)
關於基類中成員的訪問權限 基類 派生類 外部 public protected 不可訪問 protected protected 不可訪問 private 不可訪問 不可訪問
3.派生類的構造函數和析構函數
- 派生類的構造函數初始化派生類新增的數據。繼承的成員自動調用基類的構造喊函數。
- 系統會爲派生類定義一個默認構造函數(無參數、無顯式初始化表、無數據成員初始化代碼),用於完成派生類對象創建時的內存分配操作。
- 派生類需要初始化的數據有繼承的成員、新增類對象的成員和新增普通成員。
- 派生類構造函數的調用順序爲:基類構造函數、子對象的構造函數、派生類的構造函數。
- B是A的public派生類,C是B的public派生類,如果希望B可可以直接訪問A的private成員,而C不能訪問A的private成員,可以將B聲明爲A的友元類。(也可以將基類的私有成員定義爲protected,然後用private繼承)
4.多重繼承
- 派生類構造函數的執行順序是先執行所有基類的構造函數,再執行派生類本身的構造函數。
- 同一層次的各基類構造函數的執行順序取決於聲明派生類是所指定的基類順序。
- 調用不同基類中相同成員和派生類中訪問公共基類成員時會產生二義性,可以通過域作用域符和虛基類解決。