c++最重要的特性就是多型,而多型,就主要通過虛函式實現的。具體的實現過程是:
基類中的函式定義為虛函式,派生類發生覆蓋(即函式名稱、引數列表、返回值型別完全相同)的情況下,派生類中的函式也會自動變成虛函式,不論加不加virtual關鍵字。此時,基類與子類物件中都會存在一張虛函式表(因為含有虛函式),具體虛函式表的結構可以參照這篇文章:如果使用基類指標訪問函式時,會根據指標實際指向的物件的型別來呼叫基類或子類的函式,這裡就是一種「動態」性,是在程式執行中動態的判斷的。
而關於純虛函式,首先純虛函式具體定義格式如下:
virtual 《型別》《函式名》(《引數列表》)=0;
因為在很多情況下,基類中不能對虛函式給出有意的實現,或者,基類本身不是實體,僅僅是一種範疇或概念,比如,動物,動物又分為老虎、熊貓等等,動物本身不能例項化,所以可以通過純虛函式定義,將它在派生類中進行實現,並且在各個派生類中可以有不同的實現,非常靈活。
此外,含有純虛函式的類成為抽象類,由於純虛函式沒有具體的實現,因此抽象類不能例項化。
C 虛函式 純虛函式
1 基本概念 虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。您可能想要在基類中定義虛函式,以便在派生類中重新定義該函...
C 虛函式 純虛函式
1.析構函式是否應為虛函式問題?2.成員函式的虛函式問題?3.析構函式是否可以為純虛函式問題?說明 僅在使用父類指標指向子類物件時有區別 當析構函式非虛函式時,使用父類指標指向子類物件,在析構時將不會呼叫子類析構函式 當析構函式是虛函式時,使用分類指標指向子類物件,在析構時會呼叫子類析構函式,且呼叫...
C 虛函式 純虛函式
include qdebug class animal void animal animal 即要實現基類animal的animal函式 假如在dog子類中沒有實現animal 函式,則會呼叫基類的animal 函式。即列印 what is the animal 假如在dog子類中實現了animal...