委托構造函數允許使用同一個類中的一個構造函數調用其他的構造函數,進而簡化相關變量的初始化。
注意點:
1.這種鍊式的構造函數調用不能形成一個閉環(死循環),否則會在運作期抛異常。
2.如果要進行多層構造函數的鍊式調用,建議将構造函數的調用寫在初始化清單中而不是函數體内部,否則編譯器會提示形參的重複定義。
3.在初始化清單中調用了代理構造函數初始化某個類成員變量之後,就不能在初始化清單中再次初始化這個變量了。
代碼如下:
#include <iostream>
using namespace std;
class Test
{
public:
Test(){}
Test(int a)
{
cout << a << endl;
}
Test(int a, int b)
{
cout << a << endl;//跟Test(int a)中的代碼一樣
cout << b << endl;
}
Test(int a, int b, int c)
{
cout << a << endl;//跟Test(int a,int b)中的代碼一樣
cout << b << endl;//跟Test(int a,int b)中的代碼一樣
cout << c << endl;
}
int a;
int b;
int c;
};
委托構造函數
代碼如下:
#include <iostream>
using namespace std;
class Test
{
public:
Test(){}
Test(int a)
{
cout << a << endl;
}
Test(int a, int b):Test(a)
{
cout << b << endl;
}
Test(int a, int b, int c) :Test(a, b)
{
cout << c << endl;
}
int a;
int b;
int c;
};
int main()
{
int a = 2;
int b = 1;
int c = 3;
Test t(a);
cout << "---------------" << endl;
Test t1(a, b);
cout << "---------------" << endl;
Test t2(a, b, c);
cout << "---------------" << endl;
return 0;
}
測試結果:

在初始化清單中調用了代理構造函數初始化某個類成員變量之後,就不能在初始化清單中再次初始化這個變量了。