问题标签 [multiple-inheritance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
454 浏览

c++ - C ++中的非对称虚拟继承菱形

所以我有这个想法,我认为用C++实现基本上是不可能的......但我想问一下。我通读了 Stroustrup 的第 15 章并没有得到我的答案,而且我认为关于继承钻石的其他十亿个问题也无法回答这个问题,所以我在这里问。

问题是,当您从两个共享一个公共基类的基类继承时会发生什么,但是这两个基类中只有一个虚拟继承自它。例如:

我想我想这样做的原因是因为我正在尝试扩展现有库而不必重新编译整个库(不想打开那个蠕虫罐)。已经存在我想要修改的继承链。基本上是这样的(请原谅 ascii 艺术)

得到图片?我希望每个“ My”类的对象成为它们本质上要替换的类的对象,但我希望继承图中的下一个类使用“ My”基类中的重写方法实现,但所有其他方法都来自图书馆的课程。库类实际上不会继承,所以就像这样

但是如果我让我的班级几乎继承

既然MyDerived会有一个 vtable,并且MyBase会有一个 vtable,那么是否只有一个LibBase对象?

我希望这个问题足够清楚。

0 投票
4 回答
1431 浏览

java - 是否可以在 Java 中扩展泛型类参数?

这样的事情在 Java 中是否有意义?

我希望 B 类理想地扩展 X 和 C。但由于 Java 中没有多重继承,我试图想出一个更巧妙的解决方法。

诀窍在于,将在 C 中定义的东西是在超类“A”中定义的。问题是让 A 让我在“扩展”之后使用泛型类型

想法?

0 投票
8 回答
5526 浏览

java - java中的多重继承

Java 不允许从多个类继承(它仍然允许从多个接口继承。),我知道它非常符合经典的菱形问题。但我的问题是,为什么在从多个基类继承时没有歧义(因此没有钻石问题的机会)时,java 不允许像 C++ 那样的多重继承?

0 投票
3 回答
1895 浏览

c++ - 钻石问题

我正在经历钻石问题,并认为可以在各种情况下工作。这是我正在研究的其中之一。

我现在想知道如何访问 MainBase 类 mainbase 变量?任何输入。

0 投票
10 回答
14500 浏览

delphi - delphi如何实现多重继承?

我正在对一个旧库进行全面重写,但我不确定如何处理这种情况(为了便于理解,大家都欢迎自行车类比):

我有以下课程:

  • TBike- 自行车本身
  • TBikeWheel- 自行车的一个轮子
  • TBikeWheelFrontTBikeWheelBack, 都继承TBikeWheel自然后在其之上实现他们需要的特定内容

这很简单,但现在我决定创建多种自行车,每辆自行车都有自己的轮子——它们的作用与普通的前轮/后轮相同,加上特定于该自行车的轮子。

  • TBikeXYZ- 继承自TBike
  • TBikeWheelXYZ- 继承自TBikeWheel

这是我的问题:TBikeWheelFrontXYZ应该继承自TBikeWheelXYZ(获取 XYZ 轮的特定方法),但它也应该继承自TBikeWheelFront(获取前轮的特定方法)。

我的问题是,我怎样才能以一种不这样做的方式实现它:

  1. 感觉像个黑客
  2. 强迫我多次重写相同的代码
0 投票
6 回答
9052 浏览

c# - .NET 中的多重继承有哪些好的替代方案?

在 WPF 应用程序中,我的类层次结构遇到了一些问题。这是您将两个继承树合并在一起的问题之一,如果没有多重继承,您将无法找到任何合乎逻辑的方法来使继承顺利进行。我想知道是否有人对使这种系统正常工作有什么好主意,而不会使其无法遵循或调试。

我是一个低级工程师,所以我的第一个想法总是,“哦!我会用原生 C++ 编写其中的一些类,并在外部引用它们!这样我就可以尽情享受我的老派 OO 乐趣了!” 唉,当您需要从托管控件继承时,这无济于事......

请允许我展示我当前投影的类图的片段:

问题很清楚:CustomizableObject 和 CustomizableControl 对象树的分离 --- 以及将 UserControl 插入到一个树中,但不能同时插入两个树。

将 CustomizableObject 的实现移到其派生类中没有实际意义,因为实现不会因类而异。此外,多次实施它会非常令人困惑。所以我真的不想让 CustomizableObject 成为一个接口。接口解决方案对我来说没有任何意义。(说实话,接口对我来说 从来没有真正意义过......)

所以我再说一遍,有人有什么好主意吗?这是一个真正的泡菜。我想了解更多关于使接口与我的对象树一起工作的信息,而不是反对它。我正在使用 WPF 和 C# 制作这个简单的 sprite 引擎作为一个可靠的练习,比什么都重要。这在 C++ 中很容易解决 - 但我需要弄清楚如何在托管环境中解决这些问题,而不是在遇到困难时举起双手回到 Win32。

0 投票
9 回答
63133 浏览

java - 如何制作一个实现一个接口和两个泛型类型的 Java 类?

我有一个通用接口

我有一个使用两种类型对象的类,所以我想做类似的事情:

显然我不能那样做。

我当然可以自己实现调度,例如

但我正在寻找泛型提供的编译时类型检查和调度解决方案。

我能想到的最好的解决方案是定义单独的接口,例如

从功能上讲,我认为这个解决方案还可以。它只是冗长而丑陋。

有任何想法吗?

0 投票
4 回答
10019 浏览

c++ - 虚函数和多继承情况下的对象布局

我最近在一次采访中被问及涉及虚拟功能和多重继承的对象布局。
我在上下文中解释了它是如何在不涉及多重继承的情况下实现的(即编译器如何生成虚拟表,在每个对象中插入指向虚拟表的秘密指针等等)。
在我看来,我的解释中缺少一些东西。
所以这里有问题(见下面的例子)

  1. C类对象的确切内存布局是什么。
  2. C 类的虚拟表条目。
  3. A、B 和 C 类对象的大小(由 sizeof 返回)。(8、8、16 ??)
  4. 如果使用虚拟继承会怎样。肯定会影响大小和虚拟表条目吗?

示例代码:

谢谢!

0 投票
3 回答
2819 浏览

python - Python 装饰一个类来改变父对象类型

假设您有两个类 X 和 Y。您想通过向类添加属性来装饰这些类以生成新的类 X1 和 Y1。

例如:

对于 X1 和 Y1, new_attribute将始终相同。X 和 Y 没有任何有意义的关系,除了不可能进行多重继承。还有一组其他属性,但这是退化的说明。

我觉得我过于复杂了,但我曾想过使用装饰器,有点像:

感觉就像我错过了一个相当普遍的模式,我非常感谢想法、输入和反馈。

感谢您的阅读。

布赖恩

编辑:示例:

这是一个相关的摘录,可能会有所启发。常见的类如下:

这是一个子文档:

有时,Thing 会具有以下属性:

其他时候:

我一直无法弄清楚为什么 Thing 有时会有它的 _AccessParent 属性,而其他时候则没有。

0 投票
1 回答
4052 浏览

python - 如何混合旧式和新式 Python 类?

我已经看到了一些关于这个主题的问题,但我还没有找到明确的答案。

我想知道在新的 Python 代码库中使用旧式类的正确方法。例如,假设我有两个固定类AB。如果我想继承AB并转换为新型类(A2B2),这可行。但是,如果我想从A2B2创建一个新类C ,则会出现问题。

因此,是否可以继续使用此方法,或者如果任何基类被定义为旧样式,则所有类都必须符合旧样式?

请参阅示例代码以进行说明:

此代码的输出:

如您所见,问题是在调用 时C()B2类从未初始化。


更新 - 新型类示例

我猜不清楚使用super. 这是一个工作示例,其中对 super 的调用确实会初始化所有基类,而不仅仅是它找到的第一个

并产生输出: