這裡有一篇部落格介紹的很詳細:c++虛函式表解析
typedef void(*fun)(void);// 這是將fun定義為乙個指向 void (void) 函式型別的函式指標
&b
;// 得到物件的位址(開頭)
(int*)* (int*)(&b);
//對指標解引用,得到指向虛函式表(指標陣列)的指標,函式表中存放著指向函式的指標。
*(*(int**)(&b)+2);
// 在函式陣列中向後移動兩位,取出其中的函式指標。
pfun = (fun)*((int*)*(int*)(&b));
// 將函式指標的型別轉換為fun,並賦值給pfun。pfun();// 呼叫函式指標對應的函式。
之前覺得看不懂就是被博主的指標使用給繞進去了,因為存在強制型別轉換,所以指標的型別並不重要,只是有點影響理解……其他地方想到再寫~#include
class base
; virtual
void g() ;
virtual
void h() ;
};int main()
{ typedef
void(*fun)();
base b;
fun pfun = null;
std::cout
<< (int*)(&b) << " "
<< &b << std::endl;
std::cout
<< *(int**)(&b) << std::endl;
std::cout
<< (int*)*(int*)(&b) << std::endl;
// invoke the first virtual function
pfun = (fun)*(*(int**)(&b)+2);
pfun();// 函式指標可以直接呼叫,也可解引用後呼叫
(*((fun)*(*(int**)(&b) + 2)))();// 解引用呼叫
純屬自己的想法,如有不對請指正
C 虛函式表解析
前言 c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtti技術,虛函式...
C 虛函式表解析
c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtti技術,虛函式技術,...
C 虛函式表解析
今天我做的筆記 c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtti技...