2016-08-17 2 views
1

Будет ли создан конструктор по умолчанию, если я явно определяю конструктор с аргументами, но не конструктор по умолчанию?Будет ли использоваться конструктор по умолчанию, если я явно определяю конструктор с аргументами?

Спасибо!

+1

http://en.cppreference.com/w/cpp/language/default_constructor – Mat

ответ

7

Нет, вы должны явно предоставлять конструктор по умолчанию в этом случае.

Хотя вы можете (с C++ 11 и далее), для класса Foo, используйте синтаксис

Foo() = default;

в объявлении класса, который вновь вводит компилятор сгенерированный конструктор по умолчанию. (Обратите внимание, что вам нужно поместить это в раздел public для точной эквивалентности).

В качестве альтернативы, если вы указываете аргументы по умолчанию всем параметрам конструктора, то он становится конструктором по умолчанию.

4

Нет, это не так, это тот момент, когда вы хотите, чтобы пользователи классов явно указывали аргументы.

Однако, если использовать значения по умолчанию для параметров, становится конструктор по умолчанию

class Foo 
{ 
    Foo(bool flag=false); // not a default constructor, but acts the same 
}; 
+0

На самом деле он стал конструктором по умолчанию. – Bathsheba

+0

Фактически это конструктор по умолчанию. Я цитирую стандарт из памяти (так что я мог бы быть немного выключен): конструктор по умолчанию - это конструктор, который можно вызывать без каких-либо параметров. – bolov

+0

правый. Edited (также добавлен тип 'bool', слишком много python в эти дни :)) –

0

Нет. Если вы определяете конструктор, присутствуют только те конструкторы, которые вы определили. Если вы хотите сохранить конструктор по умолчанию, вы должны его переопределить.

class MyClass 
{ 
    MyClass(){}; 
. 
. 
. 
}; 
+0

Вместо этого обратите внимание на обозначение '= default'. – Bathsheba

+0

Это также вариант. Но доступно только с C++ 11. – Javi

+1

Желаю, чтобы люди по умолчанию начали использовать последний стандарт. Поэтому вместо «Это то, что вы можете сделать». О, и, кстати, с C++ 11 вы также можете это сделать », чтобы сказать« Это то, что вы можете сделать. Перед C++ 11 вам нужно было это сделать » – bolov

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