C++构造函数之委托构造函数
C++11新标准扩展了构造函数初始值的功能,所以委托构造函数就出现了,一个委托构造函数使用它所属类的其他构造函数执行它自己的初始化过程,或者说他把自己的一些(或全部)职责委托给了其他构造函数。
1.定义:
和其他构造函数一样,一个委托构造函数也有一个成员初始值列表和一个函数体。在委托构造函数内,成员初始值列表只有一个唯一的入口,就是类名本身。和其他成员初始值一样,类名后面紧跟圆括号括起来的参数列表,参数列表必须跟类中另外一个函数匹配。
2.举例说明
下面我们来看一个具体的例子:
#include<iostream>
using namespace std;
class Date
{
public:
//非委托构造函数使用对应的实参初始化成员
Date(int year,int month,int day)
:_year(year)
, _month(month)
, _day(day)
{}
//其余构造函数全都委托给另一个构造函数
Date() :Date(1990,1,1)
{}
Date(int year) :Date(){}
private:
int _year;
int _month;
int _day;
};
void FunTest()
{
Date d;
Date::Date(2016);
}
int main()
{
FunTest();
system("pause");
return 0;
}
分析:在Date类中,除了第一个构造函数外,其他的都委托了他们的工作,第一个构造函数接受三个实参,使用这些实参初始化数据成员,然后结束工作。其他两个构造函数把自己的初始化工作全都委托给了第一个构造函数去完成。这点可以通过对以上程序的调试来验证,在调试过程中,但需要第二个或者第三个构造函数来完成初始化工作时,再按F11调试都会跳转到第一个构造函数中去。