Урок 118. Инициализация нестатических членов класса

   | 

   | 

 Обновлено 24 Фев 2018  | 

 2376

 ǀ   5 

При написании класса с несколькими конструкторами, необходимость указывать значения по умолчанию всем членам в каждом конструкторе приведет к излишнему коду. Если вы обновите значение по умолчанию определенного члена, то вам нужно будет лезть в каждый конструктор.

Начиная с C++11, обычным переменным-членам класса (те, которые не используют ключевое слово static) можно задать значение по умолчанию напрямую — инициализировать:

Результат выполнения программы выше:

length: 3.5 and width: 3.5

Таким образом вы предоставляете значения по умолчанию вашим переменным-членам, которые будут использоваться вашими конструкторами, если сами конструкторы не предоставят эти значения (через список инициализации членов).

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

Несмотря на то, что мы предоставили значения по умолчанию всем переменным-членам класса, конструктор по умолчанию предоставлен не был, поэтому мы не можем создать объект класса Something без параметров.

Если предоставлено значение по умолчанию, и конструктор инициализирует член через список инициализации членов, то приоритет будет иметь список инициализации членов. Смотрим:

Результат:

length: 4.5 and width: 5.5

Обратите внимание, инициализация нестатических членов класса требует использования либо знака равенства, либо фигурные скобки (uniform инициализация) — прямая инициализация работать не будет.

Правило: Используйте инициализацию нестатических членов для указания значений по умолчанию переменным-членам.

Тест

Задание №1

Добавьте в следующую программу инициализацию нестатических членов и список инициализации членов:

Результат должен быть следующий:

color: blue and radius: 20
color: red and radius: 20
color: blue and radius: 30
color: red and radius: 30

Ответ 1

Задание №2

Зачем мы объявили пустой конструктор по умолчанию в программе выше? Все же переменные-члены и так имеют значения по умолчанию.

Ответ 2

Объект defl класса Thing будет искать конструктор по умолчанию. Если его не будет, то компилятор выдаст ошибку.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (21 оценок, среднее: 4,86 из 5)
Загрузка...
Подписаться на обновления:

Комментариев: 5

  1. Sun Serega:

    А когда будет template? Сколько всего уроков планируется?

    1. Li4ik Li4ik:

      Для Шаблонов есть отдельная глава. Но еще до той главы уроков 50. Всего еще уроков около 90 осталось перевести.

  2. Герман:

    С нетерпением ждем новых уроков!!!!!!!

  3. Герман:

    Это, наверное, лучший курс по обучению программированию, что мне встречался в сети! Автору респект!

    1. Li4ik Li4ik:

      Спасибо, буду продолжать 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО