【发布时间】:2016-01-27 08:08:35
【问题描述】:
构造函数继承的要求之一是派生类不能有任何具有相同签名的构造函数。但是,我不确定删除的函数在这些规则下的行为方式。
class Foo
{
public:
Foo() = delete;
Foo(const Foo& a_Foo) = delete;
Foo(int a_Value) : m_Value(a_Value) {}
private:
int m_Value;
};
class Bar : public Foo
{
public:
using Foo::Foo;
Bar() : Foo(7) {};
Bar(const Bar& a_Bar) : Foo(12) {};
};
- 被删除的构造函数是否会被继承?
- 如果是这样,
Bar()和Foo()具有相同的签名,这是否会使代码无效? - 您可能会争辩说
Foo(const Foo& a_Foo)和Bar(const Bar& a_Bar)具有不同的签名。复制构造函数在构造函数继承下的行为如何?
【问题讨论】:
-
一个默认/复制/移动构造函数永远不会被继承,您是在询问一般已删除的构造函数,还是只询问这三个?
标签: c++ c++11 inheritance constructor