首先:強調乙個概念
定義乙個函式為虛函式,不代表函式為不被實現的函式
定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式
定義乙個函式為純虛函式,才代表函式沒有被實現
定義他是為了實現乙個介面,起到乙個規範的作用,規範繼承這個
類的程式設計師必須實現這個函式。
對繼承的影響:
普通的類(沒有虛函式,純虛函式)就可以被繼承,而且工作的相當好
關於例項化乙個類:
有純虛函式的類是不可能生成類物件的,如果沒有純虛函式則可以。
虛函式在多型中間的使用:
虛函式主要實現多型機制,避免二義性問題。
多型一般就是通過指向基類的指標來實現的。
父類的指標在執行時刻來呼叫子類
定義純虛函式就是為了讓基類不可例項化化,
因為例項化這樣的抽象資料結構本身並沒有意義.
或者給出實現也沒有意義
實際上我個人認為純虛函式的引入,是出於兩個目的,
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 定義為虛函式以後,...