【发布时间】:2012-04-16 06:38:17
【问题描述】:
在C++11中,继承构造函数是什么意思?如果它是我认为的那样(基类构造函数被引入派生类的范围),它对我的代码有什么影响?这样的功能有哪些应用?
【问题讨论】:
-
本维基:Object construction Improvement 用简单明了的语言恰当地回答了您的问题。
标签: c++ inheritance constructor c++11
在C++11中,继承构造函数是什么意思?如果它是我认为的那样(基类构造函数被引入派生类的范围),它对我的代码有什么影响?这样的功能有哪些应用?
【问题讨论】:
标签: c++ inheritance constructor c++11
继承构造函数就是这个意思。派生类可以从其基类隐式继承构造函数。
语法如下:
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 的每个构造函数模板,生成的构造函数模板集 从省略任何省略号参数规范和连续 从末尾省略带有默认参数的参数 参数类型列表
【讨论】: