Если мы перегружаем конструктор в 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&)

3

Решение

Существование конструктора по умолчанию в этом случае зависит от того, определяете вы его или нет. Он больше не будет определен неявно, если вы сами определите другой конструктор. К счастью, это достаточно легко вернуть:

A() = default;

Обратите внимание, что термин «конструктор по умолчанию» относится к любому конструктору, который может быть вызван без аргументов (12.1p5); не только для конструкторов, которые иногда неявно определены.

6

Другие решения

Нет, по умолчанию стандартный конструктор не генерируется в таком случае. Однако в C ++ 11 вы можете объявить, что хотите, чтобы конструктор по умолчанию генерировался с помощью:

class A {
public:
A() = default;
A(int);
};
3

  • Вы можете написать конструктор по умолчанию, как предложено выше, и написать в своей функции 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,

0

Это соглашение C ++. Когда вы пишете какие-либо определяемые пользователем конструкторы, предполагается, что вам не понадобится неявный непараметрический конструктор. Это понятно, так что просто запомни это.

0
По вопросам рекламы [email protected]