Возможный дубликат:
Почему конструктор по умолчанию без параметров исчезает при его создании с параметрами
Я написал следующую программу
#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&)
Существование конструктора по умолчанию в этом случае зависит от того, определяете вы его или нет. Он больше не будет определен неявно, если вы сами определите другой конструктор. К счастью, это достаточно легко вернуть:
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 ++. Когда вы пишете какие-либо определяемые пользователем конструкторы, предполагается, что вам не понадобится неявный непараметрический конструктор. Это понятно, так что просто запомни это.