在C ++ 11中,继承构造函数意味着什么?如果它是我认为的(基类构造函数被带入派生类的范围),它对我的代码有什么影响?这种功能有哪些应用?
答案 0 :(得分:82)
继承构造函数意味着就是这样。派生类可以隐式地从其基类继承构造函数。
语法如下:
struct B
{
B(int); // normal constructor 1
B(string); // normal constructor 2
};
struct D : B
{
using B::B; // inherit constructors from B
};
所以现在D隐式定义了以下构造函数:
D::D(int); // inherited
D::D(string); // inherited
Ds成员是由这些继承的构造函数默认构造的。
就像构造函数定义如下:
D::D(int x) : B(x) {}
D::D(string s) : B(s) {}
这个功能并不特别。它只是保存输入样板代码的简写。
以下是血腥的细节:
12.9继承构造函数
1)命名构造函数的using声明隐式声明了一个 继承构造函数集。候选集继承 来自使用声明中命名的类X的构造函数 由...产生的实际构造函数和名义构造函数 默认参数的转换如下:
- X的所有非模板构造函数和
- 对于X的每个非模板构造函数,它至少有一个带有默认参数的参数,即构造函数集 省略任何省略号参数规范和结果 从末尾开始用默认参数相继省略参数 参数类型列表和
- X的所有构造函数模板和
- 对于X的每个构造函数模板,它至少有一个带有默认参数的参数,即结果的构造函数模板集 从省略任何省略号参数规范和连续 使用默认参数从结尾省略参数 参数类型列表