C++.Бархатный путь


Инициализация объекта: параметры и инициализаторы - часть 2


ComplexType(double keyReal = 0, double keyImag = 0, char keyCTcharVal = 0, int keyX = 0);

Но при этом программист должен быть готовым к самым неожиданным ситуациям. Последняя модификация прототипа вызывает протест со стороны транслятора. Он не может теперь однозначно соотнести оператор определения объекта с одним из вариантов конструктора. Перед нами тривиальный случай проявления проблемы сопоставления. Мы закомментируем определение самого первого конструктора (конструктора без параметров) и опять всё будет хорошо. Теперь вся работа по определению и инициализации объектов обеспечивается единственным конструктором с проинициализированными параметрами.

Конструктор, управление которому передаётся в результате выполнения оператора определения без параметров, называется конструктором умолчания. К конструкторам умолчания относятся следующие конструкторы:

  • конструктор, автоматически создаваемый транслятором,
  • определяемый программистом конструктор с пустым списком параметров,
  • конструктор с проинициализированными по умолчанию параметрами.

Внесём ещё одно изменение в текст нашей программы. На этот раз мы добавим спецификатор const в объявление данного-члена класса x:

class ComplexType { ::::: const int x; ::::: }

И опять возникают новые проблемы. На этот раз они связаны с попыткой присвоения значения константе. Как известно, объявление данного-члена класса не допускает инициализации, а для того, чтобы константный член класса в процессе создания объекта всё же мог получить требуемое значение, в C++ используется так называемый ctorИнициализатор (именно так называется эта конструкция в справочном руководстве по C++ Б.Строуструппа). Мы не будем гадать, в чём заключается смысл этого названия, а лучше заново воспроизведем несколько форм Бэкуса-Наура.

ОпределениеФункции ::= [СписокСпецификаторовОбъявления] Описатель

[ctorИнициализатор] ТелоФункции

ctorИнициализатор ::= : СписокИнициализаторовЧленовКласса

СписокИнициализаторовЧленовКласса ::= ИнициализаторЧленаКласса




- Начало -  - Назад -  - Вперед -