随笔 - 2  文章 - 0  trackbacks - 0
<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 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 on 2013-03-04 15:03 shaojingliu 阅读(228) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理