[读书笔记] 深入探索C++对象模型-第四章-Function语义学(中续)

本文探讨了在C++中虚拟继承情况下虚函数的调用机制,特别是当派生类Point3d虚拟继承自基类Point2d时,如何处理this指针以正确调用虚函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续整理函数调用的第三种情况内容,注:以下部分图片来自于原文

3. 虚拟继承情况下的虚函数调用: 

如下例子,Point3d虚拟继承自Point2d:


此时的内存布局如下,注意此时虽然Point3d只有唯一一个基类(最左边的)Point2d,但是它们的布局并不像非虚拟继承的单一继承那样,二者之间不再相符,二者之间的转换也就需要调整this指针,因为此时Point3d中继承而来的Point2d子对象地址与Point3d并不一致(注:原书中下图的mumble()方法为Point3d,但实际上Point3d中,并未重写该方法,所以应该为Point2d):


虚拟继承带来了前所未有的复杂性,当一个虚基类从另一个虚基类继承而来时,并且两者都支持虚函数和非静态数据成员,此时编译器对于虚基类的支持就像进了迷宫一样,所以,对于虚基类,不要在其中声明非静态数据成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值