![]() |
1
6
这就是所谓的 Diamond Problem . 大多数允许MI的现代语言都有一个解决方案。 简而言之,您有这样一个类树:
|
![]() |
2
1
我想他们的意思是一辆普通车不能从它的四个轮子继承(例如继承四倍于普通轮子)。[在同一维基百科页面上看到C++节 然而,我认为这种“省略”实际上是一个积极的特征,因为继承是用来表达子类型的,而不存在“单一类型的多个子类型”。这种“显式多重继承”并不比简单的组合好多少。 |
![]() |
3
1
然而,在 the best OO book ever -可能;)-Betrand Meyer为多重继承做了很好的辩护。他也做了类似的辩护 here |
![]() |
4
1
我认为问题在于维基百科的那篇文章。它包含不止一个尴尬或模糊的陈述,如以下珠宝: 和
坦率地说,我不知道你问题中的这句话的作者意图是什么。这只是一篇写得不好的文章中含糊不清的另一个例子,IMHO。 |
![]() |
5
1
OOP的主要目标之一是行为的重用。这原来是一种幻想。在某些情况下很有用,但在其他情况下,我们真正感兴趣的是定义对象如何交互。看看设计模式中有多少模式使用接口而不是继承。 实现接口,然后进行显式聚合,是执行多重继承所做相同操作的更清晰、更易于维护的方法。几乎所有的OOP都有定义接口的方法,几乎所有的OOP都可以将对象聚合在一起。然而,OOP以微妙的不同方式处理多重继承(菱形问题等)引起的问题。就像GOTO一样,当您使用多个iheritance查看代码时,不清楚发生了什么。然而,就像GOTO一样,它在不同的情况下也很有用。 对我来说,使用任何困难的语言结构的首要考虑因素是我是否必须长期维护应用程序。如果我这样做了,那么我会选择最清晰、更容易维护的方法,即使现在需要更多的编程。和其他事情一样,这是一个判断的决定。请注意,大多数时候,我们都会坚持我们开发的程序,时间比我们想象的要长得多。 |
![]() |
6
0
实际上,在C++类中 可以 从同一类继承多次: A类{}; B类:公共A(); C类:公共A(); clsss D:公共B,公共C{}; 现在D以两个副本A结尾。这通常被认为是“坏主意”,C++提供虚拟继承来控制它。 |
![]() |
Silverspur · “X是Y的模糊基”:多重继承噩梦 7 年前 |
![]() |
Aedoro · 扩展多个类的C++函数参数 7 年前 |
|
user6022430 · Python3.4多重继承调用特定构造函数 8 年前 |
![]() |
Mark van der Wilk · 用于重写继承方法的Mixin 8 年前 |
![]() |
pasha · 是否可以为复制基的虚拟函数提供不同的定义? 9 年前 |
![]() |
Daniel · 如何使继承从父类到子类python34起作用 9 年前 |