C 普通函式 虛函式和純虛函式

2021-07-10 02:43:42 字數 1052 閱讀 1248

首先:強調乙個概念

定義乙個函式為虛函式,不代表函式為不被實現的函式

定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式

定義乙個函式為純虛函式,才代表函式沒有被實現

定義他是為了實現乙個介面,起到乙個規範的作用,規範繼承這個

類的程式設計師必須實現這個函式。

對繼承的影響:

普通的類(沒有虛函式,純虛函式)就可以被繼承,而且工作的相當好

關於例項化乙個類:

有純虛函式的類是不可能生成類物件的,如果沒有純虛函式則可以。

虛函式在多型中間的使用:

虛函式主要實現多型機制,避免二義性問題。 

多型一般就是通過指向基類的指標來實現的。

父類的指標在執行時刻來呼叫子類

定義純虛函式就是為了讓基類不可例項化化,

因為例項化這樣的抽象資料結構本身並沒有意義.

或者給出實現也沒有意義

實際上我個人認為純虛函式的引入,是出於兩個目的,

1.為了安全.因為避免任何需要明確但是因為不小心而導致的未知的結果.

提醒子類去做應做的實現.

2.為了效率,不是程式執行的效率,而是為了編碼的效率.

1.  普通函式(no-virtual)

普通函式是靜態編譯的,沒有執行時多型,只會根據指標或引用的「字面值」類物件,呼叫自己的普通函式。

普通函式是父類為子類提供的「強制實現」。

因此,在繼承關係中,子類不應該重寫父類的普通函式,因為函式的呼叫至於類物件的字面值有關。

2.  虛函式(impure virtual)

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

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

如下就是乙個父類中的虛函式:

class a

; virtual void out2() ///預設實現

執行結果:

C 基礎 虛函式 純虛函式 普通函式

為什麼要使用虛函式 說明 為什麼要使用純虛函式 什麼情況下使用純虛函式 滿足以上兩點,可考慮宣告為純虛函式。例1 class a 輸出結果 function in class a function in class a function in class b function in class a ...

虛函式 純虛函式 普通函式 虛析構函式

虛函式 純虛函式 普通函式 虛析構函式 其他 靜態成員函式實現隱藏,當前檔案可見,出了這個檔案就不可見了,所以多個檔案可以定義相同的名字。出了作用域之後不銷毀,程式結束才銷毀。靜態成員函式不屬於物件,它與任何物件都是無關的,因此靜態成員函式沒有this指標。也就是說 非靜態成員函式有this指標,而...

c 虛函式和純虛函式

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