条款40:明智而审慎地使用多重继承
Use multiple inheritance judiciously.
对于多重继承(multiple inheritance;MI),有两个基本阵营:一是认为单一继承(single inheritance;SI)是好的,多重继承也一定更好;另一种主张单一继承是好的,但多重继承不值得拥有。
当MI 进入设计景框,程序有可能从一个以上的 base classes 继承相同的名称,这将导致歧义(ambiguity)。
砖石型多重继承
砖石型多重继承的缺省做法是执行复制,所以 IOFile 内会有两份 File 的成员变量,解决的办法是用 ”virtual 继承”:
virtual 继承的成本会较高:
使用 virtual 继承的那些 classes 所产生的对象往往比使用 non-virtual 继承的体积要大;
访问 virtual base classes 成员变量时,也比访问 non-virtual base classes 的成员变量速度慢;
virtual base classes 初始化由继承体系中的最低层(most derived)class 负责;
所以对于 virtual base class,非必要不使用 virtual bases,如果必须使用,则尽可能避免在其中放置数据。
Last updated
Was this helpful?