Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP.DOC
Скачиваний:
13
Добавлен:
03.05.2019
Размер:
618.5 Кб
Скачать

Работа №9. Перегрузка операторов (индивидуальное задание c)

Воспользуйтесь в качестве заготовки текстом предыдущей работы. Включите в заголовочный файл приложения определение класса в соответствии с индивидуальным заданием C. Класс описывает некоторую фигуру (линию, прямоугольник и др.), несколько экземпляров которой будут выводиться в окно приложения. Если фигура является замкнутой, она должна быть прозрачной. В число задаваемых характеристик фигуры могут входить ее координаты, размеры, цвет образующей и др.

Определите в классе конструктор для создания объектов с заданными координатами, а также конструктор без параметров для создания “пустого” (неинициализированного) объекта.

Включите в состав открытых членов класс две функции рисования Draw1()и Draw2(). Пусть Draw1() выводит фигуру толстым синим пером, а Draw2() – красным.

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

Определите в функции OnPaint() два объекта вашего класса, а также объект, получаемый как “сумма” этих двух объектов. Выведите в окно приложения два исходных объекта с помощью функции Draw1(), а “объект-сумму” с помощью функции Draw2(). Убедитесь в том, что вид выводимых фигур соответствует определению конкретных объектов, а операция суммирования осуществляется указанным в индивидуальном задании образом.

Работа №10. Базовые и производные классы

а. Формирование сводного отчета по всем объектам класса. Воспользуйтесь текстом работы №3 в качестве заготовки. Включите в состав открытых членов класса, помимо конструктора, пустой символьный массив txt достаточной длины, удалив его из функции Print(). Это даст возможность обращаться к нему не только из функций класса, но и из программы. В функции Print() удалите также вызов функции MessageBox(), оставив только формирование строки с содержимым объекта в массиве txt.

В тексте программы (файл .CPP) предусмотрите символьный массив report для формирования сводной таблицы объектов (не забудьте обнулить этот массив). Объявите массив из 3-4 указателей на исходный класс. Вызовом конструктора с различными значениями аргументов создайте соответствующее количество объектов, сохранив их указатели в элементах массива указателей. Организуйте цикл формирования сводного отчета, в котором сначала вызовом функции Print() для каждого объекта заполняется строка txt, а затем с помощью функции C++ strcat() эти строки объединяются в символьном массиве report. Наконец, с помощью функции MessageBox() выведите полученный сводный отчет в окно сообщения. Проконтролируйте результат.

б. Обслуживание производного класса. Дополните состав заголовочного файла задания а описанием производного класса. Включите в состав открытой секции этого класса две функции-члена: конструктор, который должен вызывать конструктор производного класса с передачей ему необходимых аргументов, и функцию Print(), замещающую одноименную функцию из базового класса. Текст новой функции Print() оставьте той же, лишь незначительно изменив выводимый ею комментарий (например, вместо слова “Название:” выводите “Новое название:”. Для того, чтобы в функциях производного класса можно было обращаться к данным базового, назначьте данным базового класса атрибут protected.

В тексте программы (файл .CPP) оставьте строки создания массива объектов базового класса и формирования сводного отчета по ним и введите практически такие же строки создания второго массива объектов, но уже производного класса, с добавлением их данных в сводный отчет. Функцией MessageBox() выведите сводный итоговой отчет в окно сообщения. Обратите внимание на то, что массивы объектов базового и производного классов приходится обрабатывать по отдельности, двумя последовательными циклами. Ответьте на следующие вопросы:

а. Сколько циклов обработки данных придется предусмотреть в программе, если от базового класса образовано 5 различных производных классов?

б. Можно ли при такой организации классов получить сводные данные по объектам всех классов (например, суммарную стоимость всех товаров или количество товаров, цена которых превышает некоторую величину)?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]