C++多重继承:菱形继承与虚基类的深入探讨
1. 多重继承实现Has - A关系
在C++中,多重继承(MI)有多种合理用途,其中之一是支持Is - A和混合关系。不过,它还有一种不太常见且颇具争议的用途,即实现Has - A关系,也就是建模包含关系或整体与部分的关系。
例如,一个学生(Student)是一个人(Person),同时学生拥有一个ID(Id)。这里,Id作为基类,Student从Id派生,从而包含了Id所提供的所有功能。以下是简单示例:
class Id {
// Id类的定义
};
class Person {
// Person类的定义
};
class Student : public Person, public Id {
// Student类的定义
};
使用继承来实现Has - A关系虽然简单,但会导致不必要的多重继承使用,使继承层次结构变得复杂。这也是在纯面向对象设计中,用继承建模Has - A关系备受争议且不受欢迎的主要原因。不过,在一些C++应用中仍能看到这种用法。
2. 菱形继承的产生及问题
当使用多重继承时,有时会将兄弟(或堂兄弟)类用作新派生类的基类,这样继承层次结构就不再是树形,而是包含菱形的图。
以下是一个具体示例,涉及 LifeForm 、 Horse 、 Person 和 Centaur 类:
超级会员免费看
订阅专栏 解锁全文
120

被折叠的 条评论
为什么被折叠?



