C++建構函式之委託建構函式
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除錯都會跳轉到第一個建構函式中去。