我正在寻找 C++ 中多重继承的有用示例,并在此处找到了创建窗口的示例:A use for multiple inheritance?并对其进行了一些修改。它在概念上看起来像这样:
class Window
class Skinable // abstract
class Draggable // abstract
class DraggableSkinnableWindow : Window, Draggable, Skinnable
我认为这应该是 MI 有意义的一个很好的例子。由于实现 Skinable 的类没有意义,因此应该将其定义为抽象的。
现在:如果我不使用 MI 的概念,这会是什么样子。 我会使用像这样的简单层次结构:
class Window
class Dragable : public Window
class Skinable : public Dragable
class DraggableSkinnableWindow : Skinnable
我仍然希望 Dragable 和 Skinable 也是抽象的,但这可能吗?对于相同的上下文但不使用 MI,第二个示例是否是一个很好的解决方案?
提前致谢!
最佳答案
虽然您的示例是多重继承的可靠用例,但我不同意 Skinnable 没有实现的说法。相反,正如 @devianfan 在他的评论中提到的那样,您的单一继承替代方案无法为概念分类法建模。
它是关于交叉轴分类的。窗口既可换肤又可拖动,但这些品质都不是相互依赖的。
请考虑一下,正如您的示例域所建议的那样,您的应用程序代码由一组图形用户界面元素组成。您可能希望根据它们的功能对它们的子组执行操作。例如,您可能会根据某些自定义操作所有可换肤元素的外观。另一方面,您的 GUI 中可能有一些元素是可拖动的,并且应该在某些用户输入事件上得到通知。窗口是属于这两个类别的事物的一个很好的例子。
关于c++ - 抽象类可以继承自 "normal"类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30593428/