Будет ли создан конструктор по умолчанию, если я явно определяю конструктор с аргументами, но не конструктор по умолчанию?Будет ли использоваться конструктор по умолчанию, если я явно определяю конструктор с аргументами?
Спасибо!
Будет ли создан конструктор по умолчанию, если я явно определяю конструктор с аргументами, но не конструктор по умолчанию?Будет ли использоваться конструктор по умолчанию, если я явно определяю конструктор с аргументами?
Спасибо!
Нет, вы должны явно предоставлять конструктор по умолчанию в этом случае.
Хотя вы можете (с C++ 11 и далее), для класса Foo
, используйте синтаксис
Foo() = default;
в объявлении класса, который вновь вводит компилятор сгенерированный конструктор по умолчанию. (Обратите внимание, что вам нужно поместить это в раздел public
для точной эквивалентности).
В качестве альтернативы, если вы указываете аргументы по умолчанию всем параметрам конструктора, то он становится конструктором по умолчанию.
Нет, это не так, это тот момент, когда вы хотите, чтобы пользователи классов явно указывали аргументы.
Однако, если использовать значения по умолчанию для параметров, становится конструктор по умолчанию
class Foo
{
Foo(bool flag=false); // not a default constructor, but acts the same
};
На самом деле он стал конструктором по умолчанию. – Bathsheba
Фактически это конструктор по умолчанию. Я цитирую стандарт из памяти (так что я мог бы быть немного выключен): конструктор по умолчанию - это конструктор, который можно вызывать без каких-либо параметров. – bolov
правый. Edited (также добавлен тип 'bool', слишком много python в эти дни :)) –
Нет. Если вы определяете конструктор, присутствуют только те конструкторы, которые вы определили. Если вы хотите сохранить конструктор по умолчанию, вы должны его переопределить.
class MyClass
{
MyClass(){};
.
.
.
};
Вместо этого обратите внимание на обозначение '= default'. – Bathsheba
Это также вариант. Но доступно только с C++ 11. – Javi
Желаю, чтобы люди по умолчанию начали использовать последний стандарт. Поэтому вместо «Это то, что вы можете сделать». О, и, кстати, с C++ 11 вы также можете это сделать », чтобы сказать« Это то, что вы можете сделать. Перед C++ 11 вам нужно было это сделать » – bolov
http://en.cppreference.com/w/cpp/language/default_constructor – Mat