c++ 虛函式表研究 (一) 單繼承
本文研究單繼承情況下,c++物件的虛函式表的具體情況。所用的編譯器為vc6.0。
假設有兩個類a,b, 其中b由a派生出來,a含有虛函式fun1,b含有虛函式fun2
a 的定義如下:
b的定義如下:
測試的**如下:
測試**說明:
虛函式表指標 (int *)(&b)
虛函式表位址 *(int *)(&b)
虛函式表的第乙個元素,也就是指向fun1的指標 (int * )(*(int *)(&b))
虛函式表的第二個元素,也就是指向fun2的指標 (int * )(*(int *)(&b))
那麼通過下面的語句就可以訪問到虛函式:
fun fun1=( fun) ( *(int *) *(int *)(&b));
fun1();
fun fun2=(fun) (* ((int *) (*(int *)(&b))+1));
fun2();
程式執行結果:
虛函式表指標的位址為:0012ff7c
虛函式表的位址為:4653200
第乙個虛函式fun1的位址為:00470090
a::fun1
第二個虛函式fun2的位址為:00470094
b::fun2
那麼就可以得出下面的結論:
在這種單繼承的情況下,如果有虛函式表,那麼只有乙個虛函式表,並且按照虛函式宣告的順序順序排列,派生類的虛函式緊接著基類的虛函式排列,類
b的虛函式表結果如下圖所示:
C 多型與虛函式表(一) 單繼承
個人筆記,不保證嚴謹和正確 如有錯誤還望指出!c 多型與虛函式表 一 單繼承 c 多型與虛函式表 二 多繼承 c 多型與虛函式表 三 重複繼承 c 多型與虛函式表 四 虛繼承 c 多型與虛函式表 五 拓展 物件大小 class base typedef void ptrtype void base ...
單繼承類的虛函式表
列印虛函式表 include include using namespace std class classa int m data1 int m data2 void func1 void func2 virtual void vfunc1 virtual void vfunc2 class cl...
單繼承和多繼承的虛函式表
前面兩篇關於多型的部落格已經詳細介紹了多型的基礎知識點和多型的底層實現原理,下面將主要介紹一下單繼承和多繼承的虛函式表 首先來看一段 class base virtual void func2 private int b 1 class derive public base virtual void...