C 中虛函式與純虛函式的區別

2021-08-08 01:56:16 字數 1294 閱讀 2214

虛函式和純虛函式可以定義在同乙個類(class)中,含有純虛函式的類被稱為抽象類(abstract class),而只含有虛函式的類(class)不能被稱為抽象類(abstract class)。

虛函式可以被直接使用,也可以被子類(sub class)過載以後以多型的形式呼叫,而純虛函式必須在子類(sub class)中實現該函式才可以使用,因為純虛函式在基類(base class)只有宣告而沒有定義。

虛函式和純虛函式都可以在子類(sub class)中被過載,以多型的形式被呼叫。

虛函式和純虛函式通常存在於抽象基類(abstract base class -abc)之中,被繼承的子類過載,目的是提供乙個統一的介面。

虛函式的定義形式:virtual

純虛函式的定義形式:virtual = 0;

在虛函式和純虛函式的定義中不能有static識別符號,原因很簡單,被static修飾的函式在編譯時候要求前期bind,然而虛函式卻是動態繫結(run-time bind),而且被兩者修飾的函式生命週期(life recycle)也不一樣。

虛函式必須實現,如果不實現,編譯器將報錯,錯誤提示為:

error lnk****: unresolved external symbol 「public: virtual void __thiscall

classname::virtualfunctionname(void)」

對於虛函式來說,父類和子類都有各自的版本。由多型方式呼叫的時候動態繫結。

實現了純虛函式的子類,該純虛函式在子類中就程式設計了虛函式,子類的子類即孫子類可以覆蓋

該虛函式,由多型方式呼叫的時候動態繫結。

虛函式是c++中用於實現多型(polymorphism)的機制。核心理念就是通過基類訪問派生類定義的 函式

多型性指相同物件收到不同訊息或不同物件收到相同訊息時產生不同的實現動作。c++支援兩種多型性:編譯時多型性,執行時多型性。

a.編譯時多型性:通過過載函式實現

b 執行時多型性:通過虛函式實現。

如果乙個類中含有純虛函式,那麼任何試圖對該類進行例項化的語句都將導致錯誤的產生,因為抽象基類(abc)是不能被直接呼叫的。必須被子類繼承過載以後,根據要求呼叫其子類的方法。

//father class

class virtualbase

;  }

//sub class

class subvirtual :public virtualbase

/*instance class and sample

*/void main()

C 虛函式與純虛函式的區別

c 虛函式與純虛函式的區別 1.虛函式和純虛函式可以定義在同乙個類 class 中,含有純虛函式的類被稱為抽象類 abstract class 而只含有虛函式的類 class 不能被稱為抽象類 abstract class 2.虛函式可以被直接使用,也可以被子類 sub class 過載以後以多型的...

C 虛函式與純虛函式的區別

什麼是虛函式?那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性 polymorphism 多型性是將介面與實現進行分離 用形象的語言來解釋就是實現以共同的方法,但因個體差異而採用不同的策略。虛函式宣告如下 virtual returntype fun...

C 虛函式與純虛函式的區別

什麼是虛函式?那些被virtual關鍵字修飾的 成員函式 就是虛函式。虛函式的作用,用專業術語來解釋就是實現 多型性 polymorphism 多型性是將介面與實現進行分離 用形象的語言來解釋就是實現以共同的方法,但因個體差異而採用不同的策略。虛函式宣告如下 virtual returntype f...