您的位置:首页 > 编程语言 > C语言/C++

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

2016-09-14 23:28 357 查看
继续整理函数调用的第三种情况内容,注:以下部分图片来自于原文

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

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



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



虚拟继承带来了前所未有的复杂性,当一个虚基类从另一个虚基类继承而来时,并且两者都支持虚函数和非静态数据成员,此时编译器对于虚基类的支持就像进了迷宫一样,所以,对于虚基类,不要在其中声明非静态数据成员。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息