什么是构造函数继承?

bad*_*ash 65 c++ inheritance constructor c++11

在C++ 11中,继承构造函数意味着什么?如果它是我认为的(基类构造函数被带入派生类的范围),它对我的​​代码有什么影响?这样的功能有哪些应用?

And*_*zos 84

继承构造函数意味着这一点.派生类可以隐式地从其基类继承构造函数.

语法如下:

struct B
{
    B(int); // normal constructor 1
    B(string); // normal constructor 2
};

struct D : B
{
    using B::B; // inherit constructors from B
};
Run Code Online (Sandbox Code Playgroud)

所以现在D隐式定义了以下构造函数:

D::D(int); // inherited
D::D(string); // inherited
Run Code Online (Sandbox Code Playgroud)

Ds成员由这些继承的构造函数默认构造.

就像构造函数定义如下:

D::D(int x) : B(x) {}
D::D(string s) : B(s) {}
Run Code Online (Sandbox Code Playgroud)

这个功能并不特别.它只是保存输入样板代码的简写.

以下是血腥的细节:

12.9继承构造函数

1)命名构造函数的using声明隐式声明了一组继承构造函数.来自使用声明中命名的类X的候选继承构造函数组由实际构造函数和由默认参数转换产生的名义构造函数组成,如下所示:

  • X的所有非模板构造函数,以及
  • 对于X的每个非模板构造函数,它至少有一个带有默认参数的参数,构造函数集是通过省略任何省略号参数规范并使用参数类型列表末尾的默认参数连续省略参数得到的,和
  • X的所有构造函数模板,以及
  • 对于X的每个构造函数模板,其具有至少一个具有默认参数的参数,构造函数模板的集合,其通过省略任何省略号参数规范并且从参数类型列表的末尾连续省略具有默认参数的参数

  • 呃,这可能是外行人吗?以一个例子为例:) (4认同)
  • @Als,我刚读过,但我仍然不明白继承构造函数如何初始化派生类数据成员. (2认同)
  • 问题:"复制构造函数"和"移动构造函数"是继承的吗?我的实验(clang3.3)建议没有,但我找不到文字来证实这一点. (2认同)
  • 您能否扩展示例以包含默认参数? (2认同)