344______________________________Часть II. Программирование на C++
Обычно конструкторы объявляются в открытой секции класса: поскольку деятельность конструкторов заключается в создании объекта типа класса, то они вызываются извне класса. Вызовы конструкторов, как правило, происходят неявно.
Создание одиночного объекта типа ANY_CLASS выглядит следующим образом:
ANY_CLASS ас; // ас — это объект класса ANY_CLASS
Заметьте, что в этом операторе совершенно отсутствуют скобки; конструирование — это неявная операция. Массив объектов типа ANY_CLASS может быть создан так:
ANY_CLASS вас[10]; // аас — это массив из 10 элементов
Как видите, синтаксис объявления массива объектов точно такой же, как и синтаксис объявления статического массива данных базового типа. В предыдущих главах неоднократно говорилось, что одна из сверхзадач языка C++ состоит в предоставлении пользователям возможности обращаться со сложными типами данных таким же образом, как и со встроенными. Благодаря неявной природе конструирования объектов достигается первый ее аспект: создание объекта выглядит точно так же, как и создание обычной переменной.
Конструктор КОПИЙ. Работа конструктора копий (copy constructor) заключается в предоставлении возможности инициализации нового объекта из уже существующего. Для объяснения глубинных механизмов этого процесса потребовалась бы не одна глава, поэтому мы ознакомимся с ними вкратце. Общий синтаксис конструктора копий таков:
Х(Х&); // здесь Х — это имя класса
Тело конструктора копий обычно состоит из серии присваивании, посредством которых каждому элементу объекта-аргумента присваивается значение соответствующего элемента вызывающего объекта.
Здесь есть много моментов, которые следует иметь в виду, и все они исключительно важны для понимания классов C++, но дальнейшее обсуждение конструктора копий мы отложим до главы 17 "Конструкторы: копирование и присваивание". Не бойтесь: этой темы мы будем аккуратно избегать.
Аргументы конструктора по умолчанию. У любых функций могут быть аргументы по умолчанию. Это относится к конструкторам в той же степени, как и к остальным функциям-членам и глобальным 'функциям. Аргумент по умолчанию — это значение, которое присваивается аргументу, если пользователем явно не задано иное.
Поскольку сейчас речь идет конкретно о конструкторах, рассмотрим соответствующую иллюстрацию. Аргументы по умолчанию удобны в тех случаях,