派生和繼承

2021-06-05 16:10:22 字數 2578 閱讀 1195

1. 派生類的概念

以物件導向的程式設計的觀點來看,繼承表達的是物件類之間的相互關係。這種關係使得某類物件可以繼承另外一類物件的特徵和能力。如果一類物件繼承了另一類物件的特徵和能力,這個類就叫做所繼承類的派生類。

1.1 宣告乙個派生類的一般格式是:

class 派生類名:派生方式(  public or private )基類名 ;

1.2 派生類建構函式和析構函式的執行順序

當派生類中不含物件成員時

●在建立派生類物件時 , 建構函式的執行順序是:基類的建構函式→派生類的建構函式;

●在撤消派生類物件時 , 析構函式的執行順序是:派生類的建構函式→基類的建構函式。

當派生類中含有物件成員時

● 在定義派生類物件時,建構函式的執行順序:基類的建構函式→物件成員的構造函 數→派生類的建構函式;

●在撤消派生類物件時,析構函式的執行順序:派生類的建構函式→物件成員的建構函式→基類的建構函式。 .

1.3 派生類建構函式和析構函式的構造規則

當基類中無顯式定義建構函式或有函式但無引數時派生類可以不向基類傳遞引數 , 甚至可以不定義建構函式 ;

當基類中有建構函式且含有引數時,派生類必須定義建構函式以提供把引數傳遞給基類建構函式的途徑。

⑴派生類建構函式的一般格式為 :

派生類::派生類建構函式名(參數列):基類建構函式名(參數列)

⑵當派生類中含有物件成員時,其建構函式的一般形式為:

派生類::派生類建構函式名(參數列):基類建構函式名(參數列),物件成員名(參數列),……物件成員名 n (參數列)

2. 多重繼承

前面我們介紹的派生類只有乙個基類,稱為單基派生或單一繼承。在實際運用中,我們經常需要派生類同時具有多個基類,這種方法稱為多基派生或多重繼承。

2.1 多重繼承的宣告:

在 c++ 中,宣告具有兩個以上基類的派生類與宣告單基派生類的形式類似,只需將要繼承的多個基類用逗號分開即可。

在多重繼承中,公有派生和私有派生對於基類成員在派生類的可訪問性與單繼承的規則相同。

另外,對基類成員的訪問必須是無二義的,若兩個基類中具有同名的資料成員或成員函式,使用成員名限定來消除二義性,若派生類中新增成員或成員函式與基類成員或成員函式同名,則派生類會覆蓋外層同名成員,也須使用作用域分辨符。

2.2 多重繼承的建構函式和析構函式:

多重繼承的建構函式的定義形式與單繼承建構函式的定義形式類似,只有 n 個基類的建構函式之間用「,」分隔。

多重繼承的建構函式的執行順序與單繼承建構函式的執行順序相同,也是遵循先執行基類的建構函式,再執行物件成員的建構函式,最後執行派生類建構函式的原則。在多個基類之間,則嚴格按照派生類宣告是從左到右的順序來排列先後。而析構函式的執行順序與建構函式的執行順序相反。

2.3 虛基類 :

如果某個派生類的部分或全部直接基類是從另乙個共同的基類派生而來,在這些基類中,從上一級基類繼承來的成員就有相同的名稱,則在這個派生類中訪問這個共同的基類中的成員時,可能會產生二義性,此時,可定義虛基類。這就要求在其直接基類的定義中,使用關鍵字 virtual 將那個共同的基類定義為虛基類,其語法形式如下:

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

虛基類的初始化與一般的多重繼承的初始化在語法上是一樣的 ,但建構函式的呼叫順序不同,虛基類建構函式的呼叫順序是這樣規定的:

1) 在同一層次中,先呼叫虛基類的建構函式,接下來依次是非虛基類的建構函式,物件成員的建構函式,派生類的建構函式。

2) 若同一層次中包含多個虛基類,這些虛基類的建構函式按對他們說明的先後次序呼叫

3) 若虛基類由非虛基類派生而來,則仍然先呼叫基類建構函式,再呼叫派生類建構函式。

3. 注意

1. 基類向派生類提供它的行為和結構,派生類負責正確初始化基類物件

2. 要用正確的引數呼叫直接基類的建構函式,以作為每個派生類建構函式的一部分 ( 討論 )

3. 普通成員函式不能用這種語法呼叫基類方法

4. 類只負責其直接基類的構造。但存在虛基類時有所不同

5. 派生類建構函式的引數要包括自己使用的和基類需要使用的所用引數

6. 派生類繼承基類的行為和結構,但不繼承建構函式和析構函式

7. 要在派生類拷貝建構函式中呼叫基類的拷貝建構函式

8. 要在派生類賦值運算子中呼叫基類的賦值運算子

9. 派生類析構函式並不明確呼叫基類的析構函式

10. 所用虛基類都由最後的派生類的建構函式所初始化。當建立物件時,將忽略子物件建構函式內部對虛基類建構函式的呼叫。

11. 公有繼承是繼承的主要模式,私有繼承只在特殊情況下用(如實現堆疊類可從列表類中繼承,但它不是某種列表,重新匯出私有基類的成員。)私有繼承沒有多型性。

12. 在單一繼承能實現目的時 , 不要用多重繼承

13. 繼承的優點:**重用,在正在執行的程式中加入新類和新功能(如衛星、病人監護),動態聯編,多型性。

繼承和派生

繼承 類和類之間的關係 派生 子類在父類基礎上衍變出一些新的特性或者功能 子模擬父類更加強大 父類 parentclass superclass 基類 子類 childclass subclass 派生類 nsobject 還可以稱為根類 private 私有繼承 protected 受保護繼承 p...

繼承和派生

繼承中的基本語法 通過公有繼承,派生類得到了基類中除建構函式 析構函式之外的所有成員。include using namespace std class parent void howtoprint2 parent base void main int b protected private cla...

派生和繼承

1.派生類的概念 以物件導向的程式設計的觀點來看,繼承表達的是物件類之間的相互關係。這種關係使得某類物件可以繼承另外一類物件的特徵和能力。如果一類物件繼承了另一類物件的特徵和能力,這個類就叫做所繼承類的派生類。1.1宣告乙個派生類的一般格式是 class 派生類名 派生方式 public or pr...