Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абстрактные классы.rtf
Скачиваний:
6
Добавлен:
10.07.2019
Размер:
2.25 Mб
Скачать

2.4. Массивы объектов

Тип элемента массива может включать не только встроенные типы данных, такие как int или char, но также определяемые пользователем типы класса. Результирующий массив объектов может использоваться для создания списков, таблиц и так далее. Однако, использование объектных массивов требует осторожности. Объявление массива вызывает конструктор для каждого объекта в списке. Сравните простое объявление одного объекта Rectangle и массива из 100 объектов Rectangle. В каждом объявлении конструктор вызывается для создания объекта, который задает длину и ширину. В случае массива конструктор вызывается для каждого из 100 объектов.

Rectangle pool(150,100);//создание бассейна 150х100

Rectangle room[100]; //конструктор вызывается для

//комната[0] .. [99]

Объявление объекта pool передает начальные значения конструктору. Объекты room фактически имеют начальные значения, поскольку конструктор Rectangle присваивает нулевые значения по умолчанию длине и ширине объекта:

Rectangle(float 1=0, float w=0); //параметры по умолчанию

После объявления массива длина и ширина каждого объекта room[i] имеют нулевые значения:

cout << room[25].GetLengh() //выход 0;

cout << room[25].GetWidth() //выход 0;

room[25].PutLengh(10)//установка длины комнаты[25] на 10

room[25].PutWidth(5)//установка ширины комнаты[25] на 5

Объявление массива объектов Rectangle поднимает важную проблему, касающуюся массивов и классов. Если конструктор класса Rectangle не имеет параметров по умолчанию, объявление массива room вызовет ошибку, потому что каждый массив будет требовать параметры. Объявлению потребуется список инициализаторов массива, который управляет каждым элементом в массиве. Например, для объявления массива room из 100 элементов и установки параметров длины и ширины на 0 потребуется список инициализаторов 100 объектов Rectangle. В действительности это не практикуется.

Rectangle room[100] = {Rectangle (0, 0), , . . , Rectangle(0, 0)};

Для объявления массива объектов мы предоставляем конструктору значения по умолчанию или просто создаем конструктор без параметров.

2.4.1. Конструктор умолчания

Конструктор умолчания (default costructor) — это конструктор, не требующий никаких параметров. Это бывает, когда конструктор не имеет параметров или когда каждый параметр имеет значение по умолчанию. В этой главе класс Rectangle содержит конструктор умолчания, тогда как класс Temperature требует параметров при объявлении объекта.

Класс Rectangle

КОНСТРУКТОР

Rectangle (float l=0, float w=0);

Конструктор содержит параметры l и w со значением по умолчанию 0. При создании массива Rectangle значения по умолчанию присваиваются каждому объекту.

Rectangle R[25];//каждый элемент имеет значение Rectangle(0,0)

Класс Temperature

КОНСТРУКТОР

Temperature(float h, float l);

Класс Temperature не содержит конструктор по умолчанию. Вместо этого, объекту должно быть дано начальное значение для высокой и низкой температуры. Объявление объектов today и week является недействительным!

Temperature today; //недействительно: отсутствуют параметры

Temperature week[7]; //Temperature не имеет конструктора по умолчанию