在c++中虛函式在
c++中的實現機制就是用虛表和虛指標。下面舉個例子:
// 2014525_5.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include using namespace std;
class a
我們通過對程式進行除錯跟蹤如下:
aa物件的記憶體分配:
很明顯,編譯器,為a類準備了乙個虛擬表a::vftable
a::f 的位址
a::g 的位址
其中,__vfptr是虛指標,指向虛擬表a::vftable
bb物件的記憶體分配:
當某次出現b bb的時候,編譯器分配空間,bb的布局如下:
__vfptr : 指向b的虛表b::vftable
int a: 繼承a的成員
int b: b成員
因為b繼承了a,故編譯器也為b準備了乙個虛擬表vftable:
a::f 的位址
b::g 的位址
其中,__vfptr是虛指標,指向虛擬表b::vftable.
注意,這裡因為b:g重寫了,因此b的虛表中的g是放b::g的入口位址。
pa的記憶體塊區域:
參考:
a::f 的位址
a::g 的位址
a::f 的位址
b::g 的位址
vptr : 指向b的虛表vtableb
int a: 繼承a的成員
int b: b成員
C 虛函式實現機制
看完之後,對c 中的虛函式實現機制算的上是恍然大悟,但是個人感覺博文中有幾點不足之處,現在一一枚舉,以下語言僅僅代表個人看法 1.定位虛表的方式 大家都知道含有虛函式的類的例項裡面前4個位元組是虛函式指標占用的記憶體,裡面填充的是虛函式表的位址號。原博文中通過乙個long型別的物件取得前四個位元組的...
c 虛函式實現機制
1 c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 ...
C 虛函式實現機制
c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,...