问题标签 [inherited-constructors]

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 回答
907 浏览

c++ - 继承构造函数、默认构造函数和可见性

[namespace.udecl]/18所述:

[...] 命名构造函数的 using 声明不会创建同义词;相反,如果附加构造函数在用于构造相应基类的对象时可访问,则它们是可访问的,并且使用声明的可访问性被忽略。[...]

因此,以下代码无法编译:

它返回一个与所有主要编译器或多或少相同的错误:

在这里声明受保护

另一方面,以下代码编译:

它不应该因为与前面示例中导致错误相同的原因而无法编译吗?
它允许它编译什么?

0 投票
2 回答
1134 浏览

c++ - 重载继承的构造函数

给定以下基类:

还有一个从基派生的类:


有没有办法避免必须创建两个单独的构造函数Derived,而是重载继承的Base构造函数来初始化的额外成员Derived

我正在考虑使用这样的东西:

这很接近,但过于冗长并且如果基类的构造函数被继承则不起作用。即如果using Base::Base存在于类中(那么它默认为那些构造函数并且不初始化字段b)。

如果不存在基类继承的构造函数(即删除using Base::Base.


这是完成这项工作的唯一方法吗?即通过在每个派生类中删除using Base::Base和使用可变参数模板构造函数?有没有更简洁的方法来重载继承的构造函数?

我正在使用 C++17。

0 投票
2 回答
94 浏览

python - 打印列表中实例的属性,仅当它存在时

我想打印一个类属性,实例列表的一部分,只有当这个属性存在时

我创建了一个类名 Guitarist,其中包括一个名称属性和 otherItems(通常是一个字典,供用户添加其他数据,如乐队、吉他等......)。它将类添加到列表中(我希望我不会混淆术语)我创建了另一个名为 FenderGuitarist 的类,它继承了 Guitarist,并将吉他的属性添加到构造函数中。我如何更改打印功能,它将吉他手列表作为参数,只有当它识别吉他属性时,它才会打印它?注意:请忽略用户也可以将吉他属性添加到 otherItems 字典的事实。

打印结果:列表中每个项目的名称、吉他(如果存在)和字典的其他项目

因此,对于此代码,我希望打印功能仅将 tomMisch 项目标识为具有吉他属性,然后打印它。对于其他人,只需打印名称和 otherItems 字典中的所有内容:

0 投票
2 回答
115 浏览

c++ - 在调用基 ctor 时是否应该将 args 复制到继承的构造函数?

对于以下程序:

海合会给出:

VS 2017(也在 C++17 模式下)提供:

谁是对的,为什么?

(我们也不要忘记 VS 2017 没有正确执行强制复制省略。所以它可能只是副本是“真实的”,但 GCC 根据 C++17 规则省略了它,而 VS 没有……)

0 投票
0 回答
224 浏览

delphi - Delphi构造函数如何(继承Parent.Parent创建)或(调用Parent.Parent.Create)

嗨,我试图绕过 parent.create 有效地调用父母的 parent.create

这是一个例子

如果我创建这些类中的每一个并输出消息

目前正在输出

vMyIMyExample1._MyMessage = TMyExample1
vMyIMyExample2._MyMessage = TMyExample1 TMyExample2
vMyIMyExample3_1._MyMessage = TMyExample1 TMyExample2 TMyExample3.1
vMyIMyExample3_2._MyMessage = TMyExample3.2

我正在尝试调用 TMyExample3.CreateBypassingTMyExample2Create 来输出

vMyIMyExample3_2._MyMessage = TMyExample1 TMyExample3.2

我需要在此通话中进行哪些更改才能使其正常工作?是否可以在不更改或(添加另一个构造函数)到 TMyExample2.create 的情况下做到这一点

0 投票
1 回答
95 浏览

c++ - 相对于继承的构造函数,gcc 编译器是否还有一个错误?

此代码不使用 gcc HEAD 10.0.0 20190 编译,而是使用 clang HEAD 9.0.0 编译

错误是

0 投票
2 回答
111 浏览

c++ - 复制/移动构造函数可以通过 c++17 中的 using-declaration 继承吗?

c++14 从 12.9 [class.inhctor]/p3 中的继承构造函数中明确排除了复制/移动构造函数。

对于候选继承构造函数集中的每个非模板构造函数,除了没有参数的构造函数或具有单个参数的复制/移动构造函数,构造函数被隐式声明为具有相同的构造函数特征,除非用户声明的构造函数具有使用声明出现的完整类中的相同签名或构造函数将是该类的默认、复制或移动构造函数。

但是我在 c++17 中找不到任何详细的描述。clang/gcc 显示基类的复制/移动构造函数不是继承的。有人可以提供标准中解释的地方吗?谢谢。