什么是构造函数继承?
Posted
技术标签:
【中文标题】什么是构造函数继承?【英文标题】:What is constructor inheritance? 【发布时间】:2012-04-16 06:38:17 【问题描述】:在C++11中,继承构造函数是什么意思?如果它是我认为的那样(基类构造函数被引入派生类的范围),它对我的代码有什么影响?这样的功能有哪些应用?
【问题讨论】:
本维基:Object construction Improvement 用简单明了的语言恰当地回答了您的问题。 【参考方案1】:继承构造函数就是这个意思。派生类可以从其基类隐式继承构造函数。
语法如下:
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 的每个构造函数模板,生成的构造函数模板集 从省略任何省略号参数规范和连续 从末尾省略带有默认参数的参数 参数类型列表
【讨论】:
@Als,我刚读到,但我仍然不明白继承构造函数将如何初始化派生类数据成员。 @badmaash:看我的例子。 Ds 成员是默认构造的。 @badmaash:用户声明取代隐式声明。显式定义的 D(int) 优先,B(int) 不被继承。 问题:“复制构造函数”和“移动构造函数”是否继承?我的实验 (clang3.3) 建议不是,但我找不到文本来确认这一点。 您能否扩展示例以包含默认参数?以上是关于什么是构造函数继承?的主要内容,如果未能解决你的问题,请参考以下文章