【升职加薪日记】2021.6.10 -- 关于虚函数的一点点思考

今天看了一点关于c++内存的知识。
https://blog.csdn.net/jiangyi711/article/details/4890889

看了一点点《c++ primer》。

有如下几点收获:

  1. 虚基类和虚函数有很大区别,虚基类也叫做共享基类,是在多继承关系中用来避免歧义的。
  2. 虚函数的实现依赖于虚表指针和虚表,子类在继承具有虚函数的父类的时候,会复制父类的虚函数表,并将继承来的虚表指针指向它。带有虚函数的类,每继承一次就需要复制一次虚函数表。这个结论是我推测出来的。因为,如果不是这样的话,子类和父类共用一个虚函数表,那么如果一个父类被多个不同的子类继承,那么这些子类分别做的重写动作就会出现冲突。所以虚函数表一定是子类独享的。换句话说,带有虚函数的类,每多一种子类就会多一张虚函数表,注意这里是“一种”子类,也就是说,同一子类的多个实例当然是可以共享同一张虚函数表的。
  3. 相比于C语言,C++类的设计实现了接口与实现的分离。这里的接口就是指函数,函数是类的用户唯一关心的东西。实现是类的成员和函数体,这些东西是用户不关心的。所谓的分离,就是指用户关心的东西和用户不关心的东西,可以做分离。
  4. C++的一个类的实例或对象的大小,基本上全部取决于他的非静态数据成员以及排布顺序,而函数体是不作为类对象的大小的,函数体在代码段中,静态数据成员在数据区中,而放在栈中的只有非静态数据成员。
  5. 具体的理解,可能需要读一读《深度探索C++对象模型》。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值