委托构造的使用方法类似成员列表初始化的变种;

注意:

  1. 如果在一个构造函数中使用了本类的委托构造,就不能再对成员使用列表初始化了;
  2. 会先执行委托构造函数的函数体,然后再执行本身的函数体;
  3. 虽然可以在构造函数中调用其他的构造函数,但已经被初始化的成员变量还会被当前的构造函数进行重置,有可能导致又变为原来的未初始化状态;
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 =