1 typedef unsigned int uint;
2 typedef void (*callPtr)();
3
4 class CBaseClass
5 {
6 public:
7 CBaseClass(){}
8 ~CBaseClass(){}
9 virtual void Print()
10 {
11 printf("Call: CBaseClass Print\n");
12 }
13 };
14
15 class CDeriveClass: public CBaseClass
16 {
17 public:
18 CDeriveClass(){}
19 ~CDeriveClass(){}
20 virtual void Print()
21 {
22 printf("Call: CDeriveClass Print\n");
23 }
24 };
25
26 int main()
27 {
28 // 創(chuàng)建對象 pDeriveA
29 CBaseClass* pDeriveA= new CDeriveClass();
30 // 獲得對象A的vtable
31 uint* pVTableA= (uint*)*((uint*)pDeriveA);
32 // 取得vtable中第0個function
33 callPtr funcA= (callPtr)pVTableA[0];
34 // 調(diào)用Print
35 funcA();
36
37 // 創(chuàng)建對象 pDeriveB
38 CBaseClass* pDeriveB= new CDeriveClass();
39 // 獲得對象B的vtable
40 uint* pVTableB= (uint*)*((uint*)pDeriveB);
41 // 2個對象的VTable應該相等
42 printf("vtable %s\n", (pVTableA== pVTableB) ? "Equal!" : "Not Equal!");
43
44 return 0;
45 }
46
posted on 2013-03-04 15:03
shaojingliu 閱讀(237)
評論(0) 編輯 收藏 引用