2010-10-27
今天了解了一下c++的虛函式表,發現乙個問題,那就是虛函式表的位址到底是什麼???
指向虛函式表v-table的指標一般是存放在類物件的記憶體空間中的前四個位元組,那麼取得這個指標值也就是可以取得對虛函式表的控制
參考一些**,注視部分為自己所想
說說自己的理解:
&b 取物件位址,(int*)&b將取的位址轉化為int* ,這個位址是指向物件記憶體空間的,所以它不是虛函式表的位址,對其解引用
(int*)*(int*)&b之後,所得結果才是虛函式表的指標,也就是物件記憶體空間的前四個位元組,那麼我們通過這個指標要得到虛函式表中
第乙個虛函式的位址就可以在對其解引用一次(int*)*(int*)*(int*)(&b),如此,通過對虛函式表的指標的操作就可以得到所有的虛函式的位址
如取第二個虛函式:
((int*)*(int*)(&b)+1)將虛函式表指標移動一位,即指向第二個虛函式的位址,在解引用(int*)*((int*)*(int*)(&b)+1)得到第二個虛函式的地
址,對其轉換成fun的函式指標型別,在通過呼叫操作符(),就可以呼叫虛函式g()。
C 虛函式表
考慮最簡單的有虛函式的繼承關係 class f class s public f 此時,我們可以定義乙個父類的指標,實際指向乙個子類的物件。呼叫func函式的結果是子類的函式。虛函式在這裡是動態繫結的。f f new s f func 輸出s func 我們知道子類即使不定義虛函式也會繼承該虛函式表...
C 虛函式表
一般來說,對於開發者我們只需要知道虛函式的使用方法,以及虛函式表的存在即可。但面試時往往會遇到更細節的問題,比如讓你實現乙個虛函式機制,雖然不太實用,總歸了解些底層知識也是件好事。但如果有人苦苦相逼一定要拿這個刷人,你就去罵他吧,你才是寫編譯器的,你們全家都是寫編譯器的。唉,我有些失態了.1.虛函式...
C 虛函式表
c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtti技術,虛函式技術,...