虚表的细节

虚表的细节

2021年5月29日

9:23

对于同一类对象,无论实例化了多少个对象,都只会创建一张虚表!

所以比如cat类,如果我实例化了两个多个cat,他们虚表放的东西都是一样的!

但是放虚表的空间地址不一样。

=====================================================

一般的面向对象来说,如果子类重写的函数中没有父类的函数,调用时会先查找子类是否拥有该函数,如果没有,就会去父类中查找该函数!

but:

如果cat只重写了一个函数,

仍然会创建一个虚表,在虚表内把要调用的函数地址放好,

调用时一步到位直接调用!

===================================================

只要函数里面有虚函数,都一定会搞虚表!即便是父类也会在最前面四个字节创建虚表,一旦有虚函数,一视同仁

表面上可能没必要,但是长远来看是很有必要的,因为你搞虚函数,就意味着你将来有子类存在。

============================================================

只要父类是虚表,那么继承父类的子类的子类的子类的子类的子类,都是虚表!

因为继承会把所有的所有的继承下来

这个whiteCat 的虚表放置的是     animal里面的run     和        cat 里面的speak

因为找不到调用一般是上一级查找!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值