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


Инициализация объекта: параметры и инициализаторы


Совместно используемые функции различаются списками параметров. В этом смысле конструкторы подобны функциям. Рассмотрим определение конструктора с параметрами. Мы расположим его за пределами класса. При этом в классе располагается прототип конструктора, а его имя при определении заменяется квалифицированным именем:

class ComplexType { ::::: public: ComplexType(double keyReal, double keyImag, char keyCTcharVal, int keyX); ::::: }; ::::: ComplexType::ComplexType(double keyReal, double keyImag, char keyCTcharVal, int keyX) { cout << "This is ComplexType(" << keyReal << "," << keyImag << "," << (int)keyCTcharVal << "," << keyX << ")" << endl; real = keyReal; imag = keyImag; CTcharVal = keyCTcharVal; x = keyX; };

А вот и подходящее определение. Мы расположим его в функции main:

ComplexType CDw2(100,100,0,0); /* Создаётся объект типа ComplexType под именем CDw2 с определёнными значениями. */ int iVal(10); /* Аналогичным образом может быть определён и проинициализирован объект основного типа */

Заметим, что к такому же результату (но только окольными путями) приводит и такая форма оператора определения: ComplexType CDw2 = ComplexType(100,100,0,0);

И снова мы встречаем случай определения объекта посредством постфиксного выражения. Здесь опять можно говорить о явном обращении к конструктору с передачей ему параметров. Выражения явного приведения типа здесь построить невозможно, поскольку за заключённым в скобочки именем типа должно стоять унарное выражение.

Заметим, что не может быть операторов определения переменных с пустым списком инициализаторов:

ComplexType CDw1(); // Это ошибка! int xVal(); // Это тоже не определение.

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

При объявлении и определении функций C++ позволяет производить инициализацию параметров. Аналогичным образом может быть модифицирован прототип конструктора с параметрами:




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