//虛函式表儲存了虛函式的位址,虛函式表相當於乙個指標陣列
class base
virtual
void g()
virtual
void h()
};typedef
void(*pfun)(void);
main
base b;
pfun pfun = null;
cout
<< &b<< endl;
cout
<< (int*)(&b)<< endl;//同上
//虛函式表儲存了虛函式的位址,所以以(int*)(&b)為位址的值即為虛函式位址
//虛函式表儲存在類物件記憶體空間的第乙個位置
//繼承子類的例項中,同名虛函式會覆蓋父類的虛函式在虛表中的位置,沒有被覆蓋的函式依舊,這樣就實現了多型
cout
<< *((int*)(&b))<< endl;//以(int*)(&b)為位址的值
cout
<< "---"
<< (int*)*(int*)(&b) << endl;//把值強轉為int型位址
cout
<< "---"
<< (int*)*(int*)(&b)+1
<< endl;//加4個位元組
cout
<< "---"
<< (int*)*(int*)(&b)+2
<< endl;//指標佔4個位元組
cout
<< "---"
<< (int*&)b<< endl;//同上
pfun = (pfun)*((int*)*(int*)(&b));//轉化成指向函式的指標
pfun();//base::f
pfun = (pfun)*((int*)*(int*)(&b)+1);
pfun();//base::g
pfun = (pfun)*((int*)*(int*)(&b)+2);
pfun();//base::h
C 虛函式表
考慮最簡單的有虛函式的繼承關係 class f class s public f 此時,我們可以定義乙個父類的指標,實際指向乙個子類的物件。呼叫func函式的結果是子類的函式。虛函式在這裡是動態繫結的。f f new s f func 輸出s func 我們知道子類即使不定義虛函式也會繼承該虛函式表...
C 虛函式表
一般來說,對於開發者我們只需要知道虛函式的使用方法,以及虛函式表的存在即可。但面試時往往會遇到更細節的問題,比如讓你實現乙個虛函式機制,雖然不太實用,總歸了解些底層知識也是件好事。但如果有人苦苦相逼一定要拿這個刷人,你就去罵他吧,你才是寫編譯器的,你們全家都是寫編譯器的。唉,我有些失態了.1.虛函式...
C 虛函式表
c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtti技術,虛函式技術,...