问题标签 [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 投票
5 回答
6934 浏览

c++ - C++ 虚拟继承是如何在编译器中实现的?

编译器如何实现虚拟继承?

在以下代码中:

编译器是否生成两个B::ctor函数实例,一个没有A(1)调用,一个有调用?因此,当B::constructor从派生类的构造函数调用时,使用第一个实例,否则使用第二个。

0 投票
3 回答
850 浏览

c++ - 单虚继承

我了解基类的虚拟继承在多个派生类之间创建了一个公共共享基类,从而解决了 DDD 问题。如果我的基类只有一个派生类,那么虚拟继承或非虚拟继承基类有区别吗?基本上我试图理解查询中提供的解释是否可以在编译时禁止从类派生?其中 Usage_lock 基类是虚拟继承的,以防止从类 Usable 派生。如果我删除这个虚拟键,行为就会改变,即我能够从 Usable 派生子类。所以我想了解单继承场景中虚拟键造成的差异。

0 投票
6 回答
20019 浏览

c++ - 为什么涉及虚拟继承时不能使用static_cast进行向下转换?

考虑以下代码:

这是标准 ( [n3290: 5.2.9/2]) 所禁止的,因此代码无法编译,因为Derived 实际上继承自Base. virtual从继承中删除使代码有效。

这条规则存在的技术原因是什么?

0 投票
4 回答
138 浏览

c++ - 虚拟继承抽象类中的参数化构造函数

我有一个经典的虚拟继承钻石:

我使用 NULLB并且C因为它们是抽象类,所以A永远不会在它们的构造函数中调用 ctor。NULL除了在构造函数中指定或在中声明无参数构造函数之外,还有更好的方法A吗?我希望使用参数调用构造函数,因此A() {}应该只允许在抽象类中使用 ctor。

0 投票
4 回答
240 浏览

c++ - 如何让派生类使用基实现来满足接口

我有以下两个接口,它们不是继承层次结构的一部分。然后我有两个具体的类,一个派生自另一个。

编译时出现以下错误:

如果我在 FastCar 中编写一个函数来将 drive() 委托给基类,我的程序将会工作

是否可以在不编写委托给基类的方法的情况下编译 FastCar?

注意:ICar 和 IFastCar 由两个不同的团队创建,位于两个不同的项目中。团队已就共享操作的通用方法签名达成一致。我在实现类中使用了继承来尝试重用实现中相同的部分。

0 投票
5 回答
2119 浏览

c++ - C++ 中具有虚拟继承的类大小

答案将取决于编译器,但当我看到结果时我很惊讶

如果我删除 virtual 关键字,那么分配的大小分别为 4 和 8,这是我所期望的。

为什么要占用额外的空间?我怀疑它是用于 vptr 表或类似的东西,但不确定。

0 投票
4 回答
833 浏览

c++ - 虚拟继承混淆

我正在阅读有关继承的信息,但我遇到了一个几个小时都无法解决的主要问题:

给定一个类Bar是一个具有virtual函数的类,

有什么区别:

? 几个小时的谷歌搜索和阅读得到了很多关于它的用途的信息,但没有人真正告诉我两者之间的区别是什么,让我更加困惑。

0 投票
2 回答
47882 浏览

c++ - C++ 抽象基类构造函数/析构函数 - 一般正确性

我想要一个Interface在继承时必须被覆盖的 C++(如果可能的话)。到目前为止,我有以下内容:

我故意留下了我认为构造函数/析构函数应该在ICommand. 我知道如果我删除评论,它将无法编译。请问有人可以:

  1. 向我展示如何声明构造函数/析构函数ICommand以及它们的用途MyCommand
  2. 我是否正确设置了内容,ICommand以便MyCommand必须覆盖CallMeCallMe2.
0 投票
3 回答
278 浏览

c++ - 如何检测和断言特定类的虚拟继承?

我有一个实现引用计数的 C++ 类,我希望这个类的所有用户只能虚拟地从这个类继承,这样任何对象都不会有多个引用计数器。

我想在编译时或至少在运行时用某种方法来断言这个要求。

有没有办法做到这一点?

0 投票
4 回答
334 浏览

c++ - 类中“虚拟”的含义

在以下情况下,virtual用于解决菱形问题,使 A 类的子对象与 B 和 C 共享。

例如:

这种类型的继承会在编译时还是运行时解决?我的意思是,在函数和类上使用 virtual 的含义有多大不同?使用virtual从基类继承时是否有动态绑定的概念?