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


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


ComplexType():xx(1,2) {/*…*/}; ComplexType():xx({1,2}) {/*…*/}; ComplexType():xx[0](1), xx[1](2) {/*…*/};

Согласно БНФ, в состав инициализатора могут входить только имена или квалифицированные имена. Для обозначения элемента массива этого недостаточно. Как минимум, здесь требуется выражение индексации, которое указывало бы номер элемента массива.

И всё же выход из такой ситуации существует. Можно объявить константный указатель на константу, которому в выражении инициализации можно присвоить имя ранее определённого массива:

::::: const int DefVal[2] = {1,2}; class ComplexType { ::::: const int const * px; /* Объявили константный указатель на константу. */ ::::: ComplexType():px(DefVal) {/*…*/}; ::::: };

Окольными путями мы всё же достигаем желаемого результата. Константный указатель на константу контролирует константный массив.

Услугами инициализатора могут пользоваться не только константные члены, а инициализирующие значения можно строить на основе самых разных выражений. Главное, чтобы используемые в этих выражениях имена располагались в соответствующих областях видимости:

ComplexType():px(DefVal), x(px[0]), // Транслятор уже знает, что такое px. CTcharVal(32), real(100), imag(real/25) // И здесь тоже всё в порядке. { // Здесь располагается тело конструктора. ::::: }

| |

 




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