有没有需要多重继承的场景?请提供例子。
ebaccount
问问题
354 次
6 回答
4
如果您想模拟其他 OOP 语言所具有的接口之类的东西,那么您将需要使用多重继承。
于 2009-07-15T18:44:54.320 回答
2
任何“需要”继承,以及您想在单个类上多次使用或组合在单个类中的任何东西,都“需要”多重继承。
使用继承的常见 C++ 习惯用法包括:
- 使用仅包含纯虚函数的抽象类的 Java 样式接口
- Mixins,包括通过 CRTP ( http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern ) 模拟的动态绑定,或
boost::noncopyable
. - 基于策略的设计 ( http://en.wikipedia.org/wiki/Policy-based_design )
- 提供类型特征
所以,如果你想要一个实现多个接口的类,那么你需要多重继承。如果你想要一个基于策略的迭代器类型,那么你需要多重继承(一次用于策略,一次用于特征)。
我把“需要”放在窃笑的引号中,因为显然在所有情况下,您都可以编写具有相同输出的程序,并且不使用多重继承(“图灵完备是我们所关心的”论点)。然而,图灵完整性并不是我们关心的全部,而且我们通常有编写超出图灵的输入和输出程序概念的软件的目标。我们关心源的样子。因此,“必要”。
于 2009-07-15T19:11:33.610 回答
1
使用纯抽象类,您可以拥有接口,就像在 Java 或 C# 中一样
于 2009-07-15T18:45:01.887 回答
0
当开发人员很懒惰并且不想产生不需要多重继承的更好的类设计时;-) 我主要用 C# 编写代码并且从未发现导致我诅咒他们的设计只允许单一继承的场景。
话虽如此,能够实现多个接口真的很方便。
于 2009-07-15T18:44:35.647 回答
0
没有任何场景需要图灵机以外的任何东西。
于 2009-07-15T18:47:17.047 回答
0
构建 COM 对象时。
于 2009-07-15T20:09:25.087 回答