虛函式的兩種特性

2022-08-10 03:12:12 字數 1082 閱讀 7041

在mfc程式設計中遇到了兩種虛函式的特性,看如下**,b繼承於a,c繼承於b,d繼承於c,e繼承於d,f繼承於e。

第一種特性:

#include using

namespace

std;

classa;

class b:publica;

class c: publicb;

class d: publicc;

class e: publicd;

class f: publice;

void

a::vfunc()

void

b::vfunc()

void

c::vfunc()

//void d::vfunc()

////

void e::vfunc()

////

void

f::vfunc()

void

f::show()

void main(void

)

主函式中建立類c的物件,用ptr指標來指向這個物件,1:然後呼叫虛函式vfunc(), 執行結果為vfuncc,分析原因:即使d、e、f類都繼承了c類且互相繼承,但是呼叫虛函式vfunc還是沒有顯示他們當中的乙個,因為我們只是建立了c這個物件,它只會建立它的父類b、c部分,而不會建立d、e、f部分,因此只會得到vfuncc。

2、如果我們把類c的虛函式vfunc注釋掉,執行結果就是vfuncb,因為根本原因是虛函式表的覆蓋問題,沒注釋之前,由於類c的虛函式表中的vfunc覆蓋了類b的vfunc,因此通過類c的虛函式表只能執行得到vfuncc;注釋掉類c的vfunc以後,就沒有虛函式表的覆蓋問題了,那麼執行得到vfunb了。

第二種特性:就是用基類的指標指向派生類物件的位址,來呼叫派生類中的同名的虛函式,基類指標指向哪乙個物件的位址就呼叫哪乙個物件的虛函式,同樣也滿足熱性一,就是如果派生類中沒有重寫基類同名的虛函式的話,無論基類指標指向派生類物件,還是會呼叫基類的同名虛函式,其實本質上就是派生類會繼承基類的虛函式表,基類指標指向派生類的意思只能是基類指標指向派生類中的基類部分,因此理解虛函式表示理解虛函式表的根本。

謝謝閱讀,請指正。

兩種函式截流方法

當我們按下乙個按鈕觸發了事件的時候,為了減少不必要的錯誤,希望這個按鈕上的業務執行完畢再能再次被點選,函式截流就是 阻止業務期間又觸發的事件 第一種函式截流方法 var lock true odiv.onclick function 3000 第二種函式截流方法 function throttle ...

定義函式指標的兩種形式

定義函式指標的兩種形式 林石 2009 07 09 我們在開發c c 程式時,經常遇到需要定義函式指標的情況。為了增加 的可讀性,一般都會通過typedef形式定義函式指標型別。有兩種做法,如下 其中,return type是函式返回型別,def type是函式 指標 型別名,arg list是函式...

Dll匯出函式的兩種方式

dll中匯出函式的宣告有兩種方式 一種方式是 在函式宣告中加上 declspec dllexport 另外一種方式是 採用模組定義 def 檔案宣告,def 檔案為鏈結器提供了有關被鏈結程式的匯出 屬性及其他方面的資訊。方式一 在函式宣告中加上 declspec dllexport 在動態鏈結庫程式...