Note_C++虚函数实现

 

 

C++虚函数实现机制笔记


注意:下面讨论的类均含虚函数。

 

每个(含虚函数)类都有一个虚表,表中的每一项都指向一个虚函数
同时,编译器为类添加一个指针vptr,vptr是指向虚表的虚指针。

 

程序实际运行虚函数时,先通过对象的虚指针找虚表,然后再找虚函数地址。

 

派生类继承父类的虚表、虚指针。若派生类的虚函数有变动,则虚表中相应项的地址指向派生类函数。

 

可以用sizeof()、&a,来观察内存结构。

 

类内存结构
先指向虚表的虚指针,然后成员变量。

 

总结

为了实现虚函数的动态绑定:
1、编译器底层为每个有虚函数的类引入一个虚函数表格(vtable)。
2、按类中声明的虚函数顺序依次向虚表存放虚函数地址。
3、编译器底层为每一个类对象附加一个指向虚表的虚指针(vptr)。

 

参考

C++中虚函数的实现机制
深度搜索C++对象模型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值