Learning ROS for Robotics Programming - Second Edition
16.2 子对象重叠
当继承基类时,在派生类中就获得了基类所有数据成员的副本,该副本称为子对象。假若对类 d1 和类 d2 进行多重继承而形成类 mi,类 mi 会包含 d1 的子对象和 d2 的子对象,所以 mi 对象看上去如:
现在考虑如果 d1 和 d2 都是从相同基类派生的,该基类称为 base,那么会发生什么呢?在上面的图中,d1 和 d2 都包含 base 的子对象,所以 mi 包含基的两个子对象。从继承图形状上看,有时该继承层次结构称为“菱形”。没有菱形情况时,多重继承相当简单,但是只要菱形一出现,由于新类中存在重叠的子对象,麻烦就开始了。重叠的子对象增加了存储空间,这种额外开销是否成为一个问题取决于我们的设计,但它同时又引入了二义性。
16.3 向上映射的二义性
在上图中,假若把一个指向 mi 的指针映射给一个指向 base 的指针时,将会发生什么呢?base 有两个子对象,因此会映射成哪一个的地址呢? 这里用代码来揭示上图的问题:
你是不是也遇到过类似的困惑?多重继承的复杂性确实令人头疼,不妨看看这篇详细的 面向对象之二继承多重继承 来获取更深入的理解,或者参考 C++多重继承二义性原理实例解析 进一步研究其中的奥妙。
第16章 多重继承 341
如果你还想了解更多,像是 多重继承面向对象实验报告 或者 多重继承及虚继承中对象内存的分布,都能给你提供不少启发。希望这些资源能够帮你理清头绪,迎接新的挑战!
下载地址
用户评论