Если мы перегружаем конструктор в C++, существует ли конструктор по умолчанию?
Возможный дубликат:
Почему конструктор по умолчанию без параметров исчезает при его создании с параметрами
Я написал следующую программу
#include <iostream>
class A {
public:
A(int i) {std::cout<<"Overloaded constructor"<<std::endl;}
}
int main() {
A obj;
return 0;
}
при компиляции программы я получаю следующую ошибку:
нет подходящей функции для вызова A::A() кандидаты: A::A(int) A::A(const A&)
4 ответа
Существование конструктора по умолчанию в этом случае зависит от того, определяете вы его или нет. Он больше не будет определен неявно, если вы сами определите другой конструктор. К счастью, это достаточно легко вернуть:
A() = default;
Обратите внимание, что термин "конструктор по умолчанию" относится к любому конструктору, который может быть вызван без каких-либо аргументов (12.1p5); не только для конструкторов, которые иногда неявно определены.
Нет, по умолчанию стандартный конструктор не генерируется в таком случае. Однако в C++11 вы можете объявить, что хотите, чтобы конструктор по умолчанию генерировался с помощью:
class A {
public:
A() = default;
A(int);
};
Вы можете написать конструктор по умолчанию, как предложено выше, и написать в своей функции maing:
A* obj = new A();
Например, вы можете написать в своей основной функции
A* obj = new A(5);
Вы можете установить в своем конструкторе
public: A(int i=0) { cout << "My own constructor!"; };
с помощью которого при создании объекта этого класса вы можете написать
`A* obj = new A(5);`
который изменит переменную i, чтобы иметь значение
5
ИЛИ вы можете просто инициализировать ваш объект как`A* obj = new A();`
который оставит переменную I со значением по умолчанию
0
,
Это соглашение C++. Когда вы пишете какие-либо определяемые пользователем конструкторы, предполагается, что вам не понадобится неявный непараметрический конструктор. Это понятно, так что просто запомни это.