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


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


[, СписокИнициализаторовЧленовКласса]

ИнициализаторЧленаКласса ::= ПолноеИмяКласса([СписокВыражений]) ::= Идентификатор([СписокВыражений])

ПолноеИмяКласса ::= КвалифицированноеИмяКласса

::= :: КвалифицированноеИмяКласса

Для исследования свойств ctorИнициализатора, подвергнем нашу программу очередной модификации. Мы закомментируем все ранее построенные объявления и определения конструкторов и те из операторов определения объектов класса ComplexType, которые содержали значения, определяющие начальные значения данных-членов. И сразу же начинаем определение новых вариантов конструкторов.

ComplexType():x(1) { cout << "Здесь ComplexType():x(" << x << ")" << endl; };

Перед нами конструктор с ctorИнициализатором. Эта конструкция позволяет решать проблемы начальной инициализации константных данных-членов. При работе с данными-членами класса транслятор рассматривает операцию присвоения как изменение начального значения члена. Инициализатор же отвечает непосредственно за установку этого САМОГО ПЕРВОГО значения.

В список инициализаторов разрешено включать все нестатические членам класса (объявленным без спецификатора static), но не более одного раза. Так что следующий вариант конструктора будет восприниматься как ошибочный:

ComplexType():x(1), x(2) // Ошибка. { ::::: }

Нетерминальный символ ПолноеИмяКласса определяет синтаксис инициализации нестатических объектов так называемого базового класса (об этом позже). В этом случае список выражений как раз обеспечивает инициализацию членов базового класса.

Добавим в объявление нашего класса объявление массива. Инициализация массива-члена класса при определении объекта не вызывает особых проблем (здесь следует вспомнить раздел, посвящённый массивам-параметрам). Однако в C++ отсутствует возможность инициализации нестатического константного массива-члена класса. Так что можно не стараться выписывать подобные объявления: const int xx[2]; // Бессмысленное объявление.

всё равно массив xx[2] невозможно проинициализировать. Все варианты инициализации константного нестатического массива будут отвергнуты.




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