c 的繼承方式

2022-03-26 03:27:47 字數 1739 閱讀 8300

1、純虛函式

強制子類實現介面

c++中包含純虛函式的類,被稱為是「抽象類」。抽象類不能使用new出物件,只有實現了這個純虛函式的子類才能new出物件。

c++中的純虛函式更像是「只提供申明,沒有實現」,是對子類的約束,是「介面繼承」。

c++中的純虛函式也是一種「執行時多型」。

如下面的類包含純虛函式,就是「抽象類」:

2、非純虛函式(impure virtual)

允許子類重寫

宣告一般(非純)虛函式的目的是讓派生類繼承函式的介面和預設行為。

c++的虛函式主要作用是「執行時多型」,父類中提供虛函式的實現,為子類提供預設的函式實現

子類可以重寫父類的虛函式實現子類的特殊化。

有時,我們希望基類提供的預設行為只能被派生類「顯式」的繼承,即在派生類不重新定義函式的時候,不繼承預設行為。兩種方法:

1.將基類函式宣告為純虛函式,將預設行為宣告為protected非虛函式,則派生類必須重新宣告他,並且可以在函式中使用表示預設行為的函式。此時,函式的介面與預設行為用不同的函式表示,會有一些雷同名稱的函式。

2.將基類函式宣告為純虛函式,並為其提供乙個定義,派生類中必須宣告函式,若不提供定義,則繼承基類的定義作為預設行為。此時,將預設行為也置於public中。

3、非虛函式

子類必須繼承

宣告非虛函式的目的是讓派生類繼承函式的介面和實現。

因此,不要將所有函式都宣告為非虛函式,除非他確實不會作為基類。通常也不要將成員函式都宣告為虛函式,尤其是函式不需要再派生類中重新定義時。

繼承介面和實現, 主要包含三種方式:

1. 只繼承介面, 純虛函式;

2. 繼承介面和實現, 允許覆寫(override), 虛函式;

3. 繼承介面和實現, 不允許覆寫(override), 非虛函式;

1. 純虛函式:

只繼承介面, 但是派生類必須實現其介面;

純虛函式也可以包含實現, 但是只能在指明類(即, class::)的時候使用

2. 虛函式:

繼承介面和實現, 派生類可以覆寫(override), 也可以使用預設版本, 即基函式(base)版本;

純虛函式約束程式更多, 虛函式更靈活;

3. 非虛函式

繼承介面和實現, 強制的提供派生類的實現, 不可以改變, 即不可以覆寫(override);

關於派生類使用純虛函式的實現, 如下:

虛函式(簡樸的impure virtual函式)背後的故事和純虛函式(pure virtual函式)有點不同,一如往常,派生類繼承其函式介面,但虛函式(簡樸的impure virtual函式)會提供乙份實現**,派生類可能覆寫(override)它,所以結論是:

1、宣告虛函式(簡樸的impure virtual函式)的目的是讓派生類繼承該函式的介面和預設實現,考慮error函式,其介面表示,每個類都必須支援乙個「當遇上錯誤是可呼叫」的函式,但每個類可自由處理錯誤,若某個類不想針對錯誤做出任何特殊行為,它可以退回到shape類提供的預設錯誤處理行為。

但是允許虛函式(簡樸的impure virtual函式)同時指定函式宣告和函式預設行為,卻有可能造成危險

C 繼承方式

簡單地說下c 類的3種繼承方式,分別是public繼承,protected繼承,private繼承。最常用的還是public繼承。class預設的是private繼承,它的member如果沒寫許可權也是預設 private。struct則相反,預設的是public繼承。結合下面的圖示和 對c 的繼承...

C 繼承方式

公共繼承保護繼承私有繼承 class b public a 公有繼承的特點是 基類public 為派生類的public 基類protected 為派生類的protected 基類private 不能被派生類訪問 class b protected a 保護繼承的特點是 基類public 為派生類的p...

C 繼承方式

class 派生類名 繼承方式 基類名 繼承方式限定了基類成員在派生類中的訪問許可權,包括 public 公有的 private 私有的 和 protected 受保護的 此項是可選項,如果不寫,預設為 private 成員變數和成員函式預設也是 private 類成員的訪問許可權由高到低依次為 p...