C 虛表的奇葩用法

2022-05-08 10:12:09 字數 536 閱讀 3279

1.在工程a中有個介面類

class father;
2.然後有個繼承類

class son : public father

//新增乙個虛函式

virtual string func2()

};

3.在工程b中需要使用a工程中的father類的fun2方法.但虛基類中沒有宣告虛方法怎麼辦?

1.在虛基類中增加該宣告.(推薦)

2.(特殊情況不能使用1時)在繼承類中將方法定義為虛方法.然後使用的時候動態轉換成子類物件.

class user

}

這個操作是很騷的. 第二種方案是在第一種方案暫時不能使用的時候使用的.

如果func2方法不加上virtual的話,編譯就會因為鏈結找不到符號而失敗.

當加上虛方法之後說明實際指向是在執行時定義.

而實際執行時物件內的虛函式表內是帶有該func2的.所以是可行的.

完美繞過虛基類....

c 虛函式的用法

基類定義虛函式,派生類重定義虛函式 即所謂的覆蓋 建立派生類物件 基類的指標指向派生類物件 基類指標呼叫虛函式。即使是使用 this 虛函式名 的形式來呼叫,編譯器仍將其解釋為靜態聯編的 本類名 虛函式名 即它們所呼叫的虛函式是自己類中定義的,如果自己類中沒有實現該函式,則呼叫基類中的虛函式,但一定...

C 虛指標 虛表

可分為靜態多型和動態多型 過載比較簡單這裡就不說,今天我們主要來談一談虛函式 如何驗證vptr指標存在?先看如下 父親類中沒有宣告虛函式,只有乙個int成員,而子類中宣告虛函式,並且擁有乙個int成員 include using namespace std class father class ch...

C 虛函式和虛表

一直對於c 的虛函式的概念比較模糊,今天上網查資料然後把虛擬繼承這一塊給搞懂了,給大家分享。繼承是c 的一大特性,繼承是復用的重要手段,通過繼承乙個類,繼承是型別 乙個類 之間的關係建模,共享父類的一些資源,但是有些資料是共享補了的,每個類都有自己要實現的東西,所以本質是不同的。在這裡我就不再贅述繼...