是否存在需要多重继承的场景? [关闭]

Posted

技术标签:

【中文标题】是否存在需要多重继承的场景? [关闭]【英文标题】:Are there any scenarios in which multiple inheritance is necessary? [closed] 【发布时间】:2009-07-15 18:40:23 【问题描述】:

是否有需要多重继承的场景?请举例说明。

【问题讨论】:

是的。你也想要例子吗?你应该要一些。 没有。大多数图灵完备的语言都不支持它。 我觉得这个接近***.com/questions/573913/… 您是在询问 C++ 还是一般编程? @Neil Butterworth:可以说,除了增量和移动寄存器操作之外,CS 中没有什么是必需的。我不认为OP是这个意思。我认为他在谈论多重继承是解决给定问题的最佳解决方案而不是唯一可能的解决方案的情况。 【参考方案1】:

如果您想模拟其他 OOP 语言所具有的接口之类的东西,则需要使用多重继承。

【讨论】:

+1,正是我要说的 除了接口是更通用的多重继承的受限特例(例如纯虚拟抽象基类)。 更重要的是,接口是实现的契约;类继承是​​实际的实现。您可以同时拥有合约 实现(纯虚拟 + 实现的函数),除非您的语言将您限制为一个且只有一个的实现继承(也称为 Java、C# 等)。【参考方案2】:

任何“需要”继承,并且您想在单个类上多次使用或组合在单个类中的任何东西,都“需要”多重继承。

使用继承的常见 C++ 习惯用法包括:

使用仅包含纯虚函数的抽象类的 Java 样式接口 混合,包括通过 CRTP (http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) 或 boost::noncopyable 模拟动态绑定。 基于策略的设计 (http://en.wikipedia.org/wiki/Policy-based_design) 提供类型特征

所以,如果你想要一个实现多个接口的类,那么你需要多重继承。如果您想要基于策略的迭代器类型,则需要多重继承(一次用于策略,一次用于特征)。

我把“要求”放在窃笑的引号中,因为显然在所有情况下,您都可以编写具有相同输出的程序,并且不使用多重继承(“图灵完备是我们所关心的”论点)。然而,图灵完整性并不是我们所关心的全部,我们通常在编写软件方面的目标超出了图灵的输入和输出程序概念。我们关心源的样子。因此,“必要”。

【讨论】:

【参考方案3】:

使用纯抽象类,您可以拥有接口,就像在 Java 或 C# 中一样

【讨论】:

【参考方案4】:

当开发人员很懒惰并且不想产生不需要多重继承的更好的类设计时;-) 我主要使用 C# 编写代码并且从未发现导致我诅咒他们的设计只允许单继承。

话虽如此,能够实现多个接口真的很方便。

【讨论】:

但是您很可能使用了多个接口(或者同时使用了继承和接口)。但这将是 c++ 中的多重继承,因为 c++ 没有接口作为独立概念。 (C++ 开发人员只是将接口视为没有实现方法的类)。【参考方案5】:

除了图灵机之外,没有任何场景是必要的

【讨论】:

【参考方案6】:

在构建 COM 对象时。

【讨论】:

以上是关于是否存在需要多重继承的场景? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C++ 多重继承的真实例子是啥? [关闭]

实现多重继承

Java提高篇——Java实现多重继承

C++的多重继承

C++--被遗弃的多重继承经典问题

C# 应该有多重继承吗? [关闭]