锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
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鐨剉table
31 uint* pVTableA= (uint*)*((uint*)pDeriveA);
32 // 鍙栧緱vtable涓0涓猣unction
33 callPtr funcA= (callPtr)pVTableA[0];
34 // 璋冪敤Print
35 funcA();
36
37 // 鍒涘緩瀵硅薄 pDeriveB
38 CBaseClass* pDeriveB= new CDeriveClass();
39 // 鑾峰緱瀵硅薄B鐨剉table
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