C++虚函数的工作原理

通常,编译器处理虚函数的方法是:给每一个对象添加一个隐藏成员,这个隐藏成员中保存了指向函数地址数组的指针。这种数组叫做虚函数表,虚函数表中存储了为类对象进行声明的虚函数的地址。
在这里插入图片描述
在这里插入图片描述
以上面两个类为例子,B继承自A
在这里插入图片描述
基类对象包含一个指针,指向基类中所有虚函数的地址表。
派生类对象将包含一个指向独立地址表的指针,如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址.反之,则保存该函数原始版本的地址.如果派生类定义了新的虚函数,则该函数的地址也将被添加到虚函数表中.

调用虚函数时过程如下:
1.程序查看存储在对象中的虚函数表地址,然后转向相应的函数地址表。如果使用类声明中定义的第一个虚函数,则程序使用数组中的第一个虚函数地址,并执行该地址的函数。

使用虚函数的缺点如下:
1.每个对象都将增大,增大量为存储地址的空间。
2.对于每个类,编译器都创建一个虚函数地址表。
3.每次调用,都需要到表中查找地址.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值