虛函式的實現原理 c 虛函式表解析

2021-07-05 08:44:03 字數 1232 閱讀 1799

這裡有一篇部落格介紹的很詳細: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技...