C 中的虛 虛函式和純虛函式

2021-09-25 18:41:00 字數 1271 閱讀 2886

一、多型形成的基本條件

(1)靜多型:即函式過載。表面上看,是由過載規則來限定的,內部實現卻是name mangling(命名傾軋 )行為,發生在編譯期,故稱靜多型。

(2)(動)多型:在執行階段決定,故稱動多型。

形成條件如下:

以下面畫圖操作為例子:

①父類中有虛函式,即共用介面。(由宣告型關鍵字virtual修飾的函式)

class shape

virtual void draw()

protected:

int x_;

int y_;

};

②子類覆寫父類中的虛函式。(子類中對應的函式要滿足:同名、同參、同返回才能構成覆寫)

class circle:public shape

virtual void draw()

完整例子:

#includeusing namespace std;

class shape

virtual void draw()

protected:

int x_;

int y_;

};class circle:public shape

virtual void draw()//這裡的virtual可也不寫

二、抽象基類

上面的例子可以看到,shape類中的函式成員draw()並沒有用到,可以不要函式的實現體,而且一般也不會用shape這個類去例項化物件。

class shape

virtual void draw() = 0;

protected:

int x_;

int y_;

};

此時這個類就叫抽象基類。

抽象基類:含有純虛函式的類,稱為抽象基類,且該類不能例項化,存在的意義就是被繼承,提供族類的公共介面。

三、總結

虛函式:被virtual修飾的成員函式。是形成多型的基本條件。

純虛函式:被virtual修飾,且只有宣告,沒有實現體,被「初始化」為0的成員函式。只有純介面類,才配具備擁有純虛函式。

C 中的虛函式和純虛函式

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

c 虛函式和純虛函式

虛函式 定義 在基類中用virtual宣告,不一定不被實現,可以用基類的指標來呼叫子類的對應函式,實現成員函式的動態過載。子類virtual可寫可不寫,編譯器自動加上。1.以下繼承後的print 相當於重寫,兩個類print 方法輸出結果不同 class a 2.加了vitual 定義為虛函式以後,...

C 虛函式和純虛函式

首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...