问题标签 [virtual-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 投票
3 回答
237 浏览

c++ - 什么是多重虚拟继承?

bar 和 kung 类是一个抽象类,它包含在 foo 类内部实现的纯虚方法。

这个有什么用?

0 投票
3 回答
8269 浏览

c++ - 虚拟继承中的构造函数调用顺序

这种情况下的输出是

为什么这不进入in A const

`它应该遵循 1 arg 构造函数调用的顺序。但是使用 virtual 关键字从 A 派生 B 实际发生了什么。

还有几个问题

即使我删除了上述程序中的 virtual 关键字并删除了所有默认构造函数,它也会出错。那么,为什么它需要 def 构造函数

0 投票
1 回答
149 浏览

c++ - 多重继承钻石

这是代码:

总的来说,当我调用该函数时analyzeJetPerformance (& myJetCar ),编译器给我的Jat flying不是JetCar flying我所期望的。这里有什么问题?

0 投票
6 回答
3489 浏览

c++ - 为什么 virtual 关键字会增加派生类的大小?

我有两个类 - 一个基类和一个派生自它:

这里的答案是 16。但是如果我改为使用非虚拟公共继承或使基类非多态,那么我得到的答案是 12,即如果我这样做:

或者

在这两种情况下,答案都是 12。

有人可以解释为什么派生类的大小在第一种和其他两种情况下有所不同吗?

(我在 code::blocks 10.05 工作,如果有人真的需要这个)

0 投票
2 回答
1179 浏览

c++ - 虚拟继承会增加派生类的大小吗?

可能重复:
对象大小与虚拟

虚拟继承会改变派生类的大小吗?我执行了以下代码,其中我有两个派生类,一个是虚拟继承的,另一个是非虚​​拟继承的:


输出:

12(imo:4(int a)+ 4(int c)+ 4(vir ptr))

16(额外 4 个?)

为了再次检查我是否遗漏了什么,我尝试了所需的最少代码,方法是删除类中的所有整数,输出为:

4

4

第二个输出表明两个派生类的大小相同。为什么第一次运行时vir_der的大小是16,为什么不是12?

0 投票
1 回答
76 浏览

javascript - 具有多层的 Javascript 继承:A->B->C,在 C 中使用来自 A 的函数

在javascript中,我想实现以下目标:

A 类(数组)-> B 类(EntityContainer)-> C 类(EntityList)

在代码中:

当然,继承的东西可以封装在“inheritsFrom”函数中。

在迭代所有元素(使用 this.length)时,这是实现我可以在 EntityList 中调用“this[i]”的正确方法吗?

你有什么可以在这里做得更好的吗?

多谢你们!

0 投票
2 回答
2804 浏览

c++ - 虚拟继承和接口

你总是像我上面那样继承你的虚拟接口吗?如果没有,您将如何实现上述代码?

0 投票
3 回答
1685 浏览

c++ - C++ 构造函数:为什么这个虚函数调用不安全?

这是来自 C++11 标准 sec 12.7.4。这相当令人困惑。

  1. 文中最后一句究竟是什么意思?
  2. 为什么最后一个方法调用B::B未定义?它不应该只是打电话a.A::f吗?

4 成员函数,包括虚函数(10.3),可以在构造或销毁(12.6.2)期间调用。当从构造函数或从析构函数直接或间接调用虚函数时,包括在类的非静态数据成员的构造或销毁期间,并且调用适用的对象是正在构造的对象(称为 x)或破坏,调用的函数是构造函数或析构函数类中的最终覆盖者,而不是在派生更多的类中覆盖它。如果虚函数调用使用显式类成员访问 (5.2.5) 并且对象表达式引用 x 的完整对象或该对象的基类子对象之一,但不是 x 或其基类子对象之一,则行为未定义. [ 例子:

—结束示例]

0 投票
4 回答
1960 浏览

c++ - “多级继承情况下的虚拟基类”有没有意义

考虑以下显示多级继承的示例代码:

Case1:这里类derived1base通过虚拟继承从类derived2派生而来的,类是derived1直接从类派生而来的。

Case2 :与 Case1 相同,只是不涉及虚拟继承

derived2假设我在这两种情况下都创建了一个类的对象。

  1. Case1 和 Case2 在子对象的包含方面有何不同derived2

  2. Case1 是否对 Case2 有意义?

PS:我很清楚虚拟基类在多重继承期间的重要性。

0 投票
3 回答
1293 浏览

c++ - C++“三角形”(而不是菱形)继承

(我在这里搜索并阅读了 Diamond-and virtual-inheritance questions,但找不到答案。我的想法是这种情况有点不寻常,我愿意接受我的要求有些偏离的想法。关于另一方面,我认为这应该以“不错”的方式可行。)

情况及要求:

我有一个我无法控制且无法更改的 C++ 类库。它定义了一个Window类。该类Window有一个受保护的成员(例如:)handle,不能以其他方式访问,派生类打算使用该成员。Window定义了数百个(嗯,非常多的......)方法,我不想通过委托(比如在装饰器中)重新实现这些方法。

我想向 中添加功能Window,以便派生类(我写的;说LogWindow)自动具有。此类功能的一个示例是能够将窗口彼此对齐。为了实现这一点,我需要访问Window受保护的handle成员。

对于我的实际目的,这已经足够了,解决方案很简单:派生SnappableWindowWindow,并派生所有我的Window派生类(LogWindow在本例中)从SnappableWindow

然而,我真正想要的,更漂亮的恕我直言,是:

  1. 将这种“Snappable”功能作为独立代码片段的能力,我可以选择“插入”任何其他Window派生类,也可以不选择。
  2. 将这一概念扩展到其他功能的能力,例如最小化窗口的能力。所以我可以有一个Window- 派生类,有或没有“Snappable”能力,有或没有“Minimizable”能力。
  3. “SnappableWindow”和“MinimizableWindow”的实现都需要访问受保护Windowhandle成员。
  4. 我希望“Snappable”和“Minimizable”成为实际类声明的一部分,这样我的实际类(LogWindow)“是一个”窗口,“是一个”SnappableWindow,并且“是一个”MinimizableWindow。

...现在是问题:

我知道如何通过声明SnappableWindowandMinimizableWindow不是从它们的构造函数中Window获取 a来执行此操作handle,然后LogWindowWindowand 的任意组合派生SnappableWindow和派生MinimizableWindow

编辑:在调用了init()之后,在 LogWindow 的构造函数中途handle被初始化。(而不是像我之前所说的那样,通过构造函数的一半)。WindowWindowWindow

但是,由于handleLogWindow在 's 的构造函数中初始化(在它调用Window's之后init()),我不能将 is 传递给SnappableWindowMinimizableWindow作为LogWindow's 的构造函数初始化列表的一部分。相反,我必须init()在两者上显式调用一些方法,并将其传递给handle. 而这,在我的每个Window派生类中。( LogWindow, SearchWindow,PreferencesWindow等)

我正在寻找一种能够执行以下操作的方法:

类 LogWindow:公共窗口、公共 SnappableWindow、公共 MinimizableWindow

...并且不必在内部实现任何其他内容LogWindow。我已经摆弄虚拟继承,但不能完全想出解决方案。