posted @
2013-03-04 15:29 shaojingliu 閱讀(219) |
評論 (0) |
編輯 收藏
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 // 創建對象 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 // 調用Print
35 funcA();
36
37 // 創建對象 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 @
2013-03-04 15:03 shaojingliu 閱讀(236) |
評論 (0) |
編輯 收藏