- •5. Перегрузка, копирование и преобразование
- •5.1. Перегрузка операторов
- •5.1.1. Определение дополнительных функций-операторов
- •5.1.2. Общие принципы перегрузки операторов
- •5.1.3. Перегрузка оператора присваивания
- •5.2. Применение конструкторов копирования и преобразования
- •5.2.1. Конструкторы копирования
- •5.2.2. Конструкторы преобразования
- •5.2.3. Инициализация массивов
5.2.3. Инициализация массивов
Массивы объектов уже рассматривались в гл. 3. Для инициализации массива любого типа используется стандартный синтаксис, унаследованный из языка С.
int Table [5] = {1, 2, 3, 4, 5};
На этот синтаксис налагается следующее ограничение. При инициализации массива объектов можно присвоить единственное значение каждому из его элементов и нельзя передать в конструктор группу значений. Однако конструкторы копирования и преобразования позволяют инициализировать объекты, используя единственный аргумент, следовательно, бывают полезны при инициализации массивов объектов. В качестве примера рассмотрим инициализацию массива объектов класса CCurrency различными способами.
CCurrency Money (95, 34);
CCurrency MoneyTable [5] =
{
Money,
CCurrency (15, 94),
10L,
12.23,
};
Первый элемент (MoneyTable [0]) инициализируется существующим объектом класса CCurrency с помощью конструктора копирования; второй – инициализируется конструктором, создающим временный объект класса CCurrency (затем данный объект используется для инициализации элемента массива также конструктором копирования); третий – инициализируется константой типа long с помощью конструктора преобразования с параметром типа long; четверили – константой типа double с помощью другого конструктора преобразования. Последний элемент массива инициализируется неявно; следовательно, для него компилятор вызывает конструктор по умолчанию.
Как упоминалось в гл. 2, нельзя явно инициализировать массив объектов, созданных динамически с помощью оператора new. Вместо этого компилятор вызывает конструктор по умолчанию для каждого элемента.