2015-09-05 124 views
1

有沒有辦法在C++中使用類似C#構造函數的語法,當你有同一類的多個構造函數,例如:C++類的構造函數的語法

class complex 
{ 
public: 
    double re, im; 

    complex(double r, double i) 
    { 
     re = r; 
     im = i; 
    } 

    complex():this(0.0d,0.0d) 
    { 

    } 
}; 

這個特殊的例子似乎沒有工作,但有沒有?

+0

是的,你可以轉發,調用不同的構造函數,你是指它與類的名字,不是這個 – Creris

+1

的同樣的問題被回答[這裏](http://stackoverflow.com/questions/308276/call-constructor-from-constructor-in-c) – Estiny

回答

4

在C++ 11,你可以這樣做:

class complex { 
public: 
    double re, im; 

    complex(double r, double i) 
     : re(r), im(i) { 

    } 

    complex() 
     : complex(0.0d, 0.0d) { 

    } 
}; 

如果由於某種原因,你不能使用C++ 11,你需要的情況下,這個簡單,你可以使用默認參數:

class complex { 
public: 
    double re, im; 

    complex(double r = 0.0, double i = 0.0) 
     : re(r), im(i) { 

    } 
}; 

這當然有一個缺點:你可以(錯誤地)只提供一些參數,如:complex a(1.0)

1

從C++ 11有constructor delegation feature.

你可以這樣做:

class A{ 
public:  
    A(): A(0){ cout << "In A()" << endl;} 
    A(int i): A(i, 0){cout << "In A(int i)" << endl;} 
    A(int i, int j){ 
     num1=i; 
     num2=j; 
     average=(num1+num2)/2; 
     cout << "In A(int i, int j)" << endl;} 
private: 
    int num1; 
    int num2; 
    int average; 
}; 

int main(){ 
    class A a; 
    return 0; 
}