委托构造的使用方法类似成员列表初始化的变种;
注意:
- 如果在一个构造函数中使用了本类的委托构造,就不能再对成员使用列表初始化了;
- 会先执行委托构造函数的函数体,然后再执行本身的函数体;
- 虽然可以在构造函数中调用其他的构造函数,但已经被初始化的成员变量还会被当前的构造函数进行重置,有可能导致又变为原来的未初始化状态;
class Test{
public:
Test():Test(0, 0.1){
s = "Ah";
cout << "Test()\n";
}
Test(int ii):Test(ii, 0.1, "Hi"){
cout << "Test(int)\n";
}
Test(int ii, double dd):Test(ii, dd, "Hi"){
cout << "Test(int, double)\n";
}
Test(int ii, double dd, string ss):i(ii), d(dd), s(ss){
cout << "Test(int, double, string)\n";
}
void print(){
cout << "i = " << i << "\td = " << d << "\ts = " << s << endl;
}
private:
int i;
double d;
string s;
};
int main()
{
Test t(10);
t.print();
return 0;
}
输出:
Test(int, double, string)
Test(int)
i = 10 d = 0.1 s = Hi
不可在构造函数中调用其他的构造函数:
...
Test(int ii){
Test(ii, 0.1, "Hi");
cout << "Test(int)\n";
}
...
输出:
Test(int, double, string)
Test(int)
i = 111602336 d = 4.64376e-310 s =