C++虚函数表(1)

    2010-10-27   

    今天了解了一下C++的虚函数表,发现一个问题,那就是虚函数表的地址到底是什么???

    指向虚函数表V-Table的指针一般是存放在类对象的内存空间中的前四个字节,那么取得这个指针值也就是可以取得对虚函数表的控制

 

    

   参考一些代码,注视部分为自己所想

   说说自己的理解:

   &b 取对象地址,(int*)&b将取的地址转化为int* ,这个地址是指向对象内存空间的,所以它不是虚函数表的地址,对其解引用(int*)*(int*)&b之后,所得结果才是虚函数表的指针,也就是对象内存空间的前四个字节,那么我们通过这个指针要得到虚函数表中第一个虚函数的地址就可以在对其解引用一次(int*)*(int*)*(int*)(&b),如此,通过对虚函数表的指针的操作就可以得到所有的虚函数的地址

 

    如取第二个虚函数:

 

    ((int*)*(int*)(&b)+1)将虚函数表指针移动一位,即指向第二个虚函数的地址,在解引用(int*)*((int*)*(int*)(&b)+1)得到第二个虚函数的地址,对其转换成fun的函数指针类型,在通过调用操作符(),就可以调用虚函数g()。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值