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調試都會跳轉到第一個構造函數中去。