2016-10-13 3 views
0

Это вопрос для моего текущего назначения класса. Мне нужно использовать только один конструктор в моем коде, и я не могу понять, как это сделать.Как избежать использования конструктора по умолчанию?

class test { 
    public: 
    test(int x, int y, int z); 
    (...) 
    private: 
    int x,y,z; 
} 

test::test(int x = 0, int y = 0, int z = 0){ 
    this -> x = x; 
    this -> y = y; 
    this -> z = z; 
} 

int main(){ 
    test test1, test2(1,2,3) 
    (...) 
} 

В настоящее время он не будет скомпилирован, поскольку он говорит, что у меня нет соответствующего вызова функции для test1. Я был уверен, что использование int x = 0 в качестве параметра задает значение по умолчанию ...

+5

Вы 'test1' дважды , И значения параметров по умолчанию должны быть в объявлении, а не в определении. – krzaq

ответ

0

По умолчанию значения параметров должны входить в декларацию, а не в определение.

class test { 
    public: 
    test(int x = 0, int y = 0, int z = 0); 
    (...) 
    private: 
    int x,y,z; 
} 

И определение:

test::test(int x, int y, int z){ 
    this -> x = x; 
    this -> y = y; 
    this -> z = z; 
} 

Пока вы на него, вы можете попасть в хорошую привычку использовать списки конструктора инициализатора:

test::test(int x, int y, int z): 
    x(x), y(y), z(z) 
{ 
} 
+1

Разрешено помещать аргументы по умолчанию в определение, а не в декларацию, но это ужасный стиль, потому что вещи, связанные с интерфейсом, должны быть помещены в объявление. – Brian

+0

Уточненный немного. Должен ≠ должен, но я не уверен, что намерение достаточно очевидно. – krzaq

Смежные вопросы