问题标签 [diamond-problem]

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 投票
1 回答
2840 浏览

c++ - 钻石继承最低基类构造函数

代码如下:

编码 :

问题:

1.)如果 Unknown 类被实例化,我将如何初始化所有超类?由于只有一个 Animal 实例将被创建,我怎样才能避免 mysef 不得不调用它的构造函数两次?

谢谢

0 投票
2 回答
66754 浏览

c++ - g ++“因为以下虚函数是纯的”具有抽象基类

这是我产生错误的示例代码:

似乎“SortedContainerImpl”出错了,而“ContainerImpl”很好。

g++ 抱怨:

我从 ContainerImpl 继承 SortedContainerImpl 以便重用 get_size() 和 get(int)

我不熟悉 c++,这个问题的本质是什么,我该如何解决?

谢谢大家。

0 投票
2 回答
184 浏览

c++ - 多重继承的麻烦。如何调用基函数?

我正在学习 C++,在学校作业中我必须使用菱形结构,即使它不完全正确。

(我删除了所有方法和构造函数以简化)

现在,如果我想创建一本漫画书并知道它的购买价格,我该怎么办?如果我在 ComicBook 上执行 getPurchasePrice(),则会收到以下错误:

我认为为 ChildrenBook 和 AdultBook 设置虚拟可以解决歧义?

0 投票
3 回答
107 浏览

c++ - 对相同基类的引用必须在内存中具有单独的偏移量

我发现这个程序的编译器之间存在一些不一致,

大多数编译器断言 sizeof(C) == 8 说 sizeof(C) 实际上是 12。我发现的唯一编译器没有并说它是 8 是 Microsoft Visual Studio 2010。

比我更聪明的人告诉我的原因是,在 B 中有两个单独的 A 引用需要保留彼此不同的单独偏移量。首先,从 C 派生的 A 在偏移量 0 处,并且成员 b 内的第二个 A 不能与第一个 A 在 0 处的偏移量相同,因此插入了 4 个字节的填充。

由于大多数编译器已经实现了这种行为,我想知道你需要什么情况来确保两个 A 有不同的引用?寻找一些关于为什么会这样的直觉?

有人说这可能是标准要求的条件,我们很好奇这是什么原因?

谢谢

0 投票
1 回答
807 浏览

scala - 使用特征时的 Scala 和菱形继承

给定特征:

我想创建类

现在,StorageTrait 的方法大小返回与方法 YetAnotherStorageTrait 不同的东西(它仍然是一个大小,但具有不同的集合)。

在 Scala 中设计这种情况的正确方法是什么?

0 投票
1 回答
159 浏览

c++ - 从多重/钻石继承继承

我有以下情况:

现在,如果我创建一个 D 实例,一切正常。但是,如果我创建 X 的一个实例,我会得到一个编译器错误,它告诉我某些东西试图调用 A 的默认构造函数——它不存在。如果我创建它,它会编译,但只调用默认构造函数,因此,id 没有正确设置/初始化。

这可以通过像这样实现 X 的构造函数来解决:

但我的理解是,这应该是不必要的。那么我的错误在哪里?

0 投票
1 回答
217 浏览

c++ - C++ 堆错误_CrtlsValidHeapPointer(pUserData)

使用 MSVC 编译后,我的程序在运行时触发断言失败:_CrtlsValidHeapPointer(pUserData),但代码对我来说看起来不错...



我的代码有什么问题?

0 投票
0 回答
539 浏览

c++ - 解决由于共享一个公共模板类的类的多重继承而导致的歧义

我正在尝试创建一个基类,它是一个模板类,并接受某个类作为模板。这个基类在另外两个类的父类中,它们本身就是最终类的父类。因此,除了根基类是模板类之外,我在 C++ 中遇到了传统的菱形问题。在这里使用虚拟继承并不能完全解决问题。

编辑:包括一些代码(和更正的错别字)

0 投票
4 回答
152 浏览

c++ - 访问派生类的各个类,派生类派生自两个相同的基类

我有一个名为Number. 类OneTwo派生自Number. 现在我定义了另一个类Three,我需要从多重继承中访问各个基类:

我尝试了 One::Number 和 Two::Number,但没有用。

0 投票
4 回答
471 浏览

java - 三合会没有出现战斗?(Java Set 缺少一项)

我有来自两家公司 asoft 和 bsoft 的代码。我也改变不了。这是我的情况的简化版本,我很确定有足够的信息来找到导致问题的原因。

bsoft 提供IGang,代表一个可以与其他帮派战斗的帮派。

asoft 提供GangWar,它允许IGangs 进行战斗:

Gang它需要您提供给它的 s 的附加约束Comparable,大概是这样它可以按名称排序或避免重复。每个帮派(以任意顺序,为了简单起见,此处使用设置顺序)攻击另一个帮派,直到只剩下一个帮派(或者没有帮派,如果最后两个有平局)。我写了一个简单的实现ComparableGang来测试它:

测试一下...

问题是,三合会不会出现在战斗中。事实上,gangs.size()在开头打印会doBattle()返回 3 而不是 4。为什么?如何解决?