随笔 - 2  文章 - 0  trackbacks - 0
<2019年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

posted @ 2013-03-04 15:29 shaojingliu 阅读(94) | 评论 (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 阅读(129) | 评论 (0)编辑 收藏
仅列出标题