Выбор ответа Junior Правило 0/3/5 обновлено

Куда пропал конструктор по умолчанию

Вопрос

В класс добавили конструктор Point(int x, int y). Теперь Point p; не компилируется. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Объявление любого конструктора отменяет неявный конструктор по умолчанию. Неявный конструктор по умолчанию создаётся, только если пользователь не объявил ни одного конструктора.

Варианты ответа

  1. Конструктор по умолчанию всегда нужно писать вручную, компилятор его не создаёт
  2. У класса с int-членами не бывает конструктора по умолчанию
  3. Нужно было объявить деструктор, тогда конструктор сгенерируется
  4. Объявление любого конструктора отменяет неявный конструктор по умолчаниюправильный ответ

Разбор

Неявный конструктор по умолчанию создаётся, только если пользователь не объявил ни одного конструктора. Вернуть его просто: Point() = default; (и лучше дать членам инициализаторы int x = 0;).

  • Без пользовательских конструкторов компилятор сгенерирует его сам.
  • Тип членов на это не влияет.
  • Деструктор не связан с конструктором по умолчанию.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.