在未完成的类层次结构中的“最终”类上使用虚拟继承

Posted

技术标签:

【中文标题】在未完成的类层次结构中的“最终”类上使用虚拟继承【英文标题】:Using virtual inheritance on "final" classes in unfinished class hierarchies 【发布时间】:2011-06-01 13:23:18 【问题描述】:

在未完成的类层次结构中抢先派生当前“位于底部”(即派生最多的)的虚拟类是否有任何危害或被认为是糟糕的设计?是否有充分的理由要等到真正需要虚拟继承(即,当有人决定扩展层次结构并产生菱形时)?

【问题讨论】:

【参考方案1】:

在实际需要之前,我会避免使用虚拟继承。当您使用虚拟继承时,您正在泄漏您在类上构建的部分抽象,特别是您如何初始化基类,通过强制对虚拟基类的调用到最派生的类型。

【讨论】:

通常的建议是只使用“纯”接口的虚拟继承,通常没有用户定义的构造函数。【参考方案2】:

它增加了不需要它的系统的复杂性。

当您为代码库添加功能或特性以预测未来的需求时,您通常会错过目标。有时,确实有一天会需要该功能——即使不是今天——但在许多情况下它不会。结果是大而复杂的类更难理解,更难调试、维护和扩展,并且在效率方面可能成本更高。

KISS principle 的存在是有原因的。它可以防止您的代码变成Rube Goldberg machine。

【讨论】:

虚拟继承复杂吗?

以上是关于在未完成的类层次结构中的“最终”类上使用虚拟继承的主要内容,如果未能解决你的问题,请参考以下文章

休眠映射,在未映射的类上

面向对象程序设计——概述,定义基类和派生类,虚函数

在从给定超类继承的所有类上调用虚函数

如何让我的类装饰器只在继承链中的最外层类上运行?

继承类上的PHP new self()正在创建一个基类对象[重复]

C ++如何确保在使用虚拟继承时它调用继承而不是基函数