2015-09-05 4 views
1

Есть ли способ использовать C# -like синтаксис конструктора в 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; 
} 
Смежные вопросы