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

Работа №11. Виртуальные функции

Выполните модификацию предыдущей работы (№10b). Объявите функции Print() обоих классов виртуальными. В тексте программы создайте теперь уже один массив из 4-5 указателей на базовый класс. Некоторым из этих указателей назначьте адреса объектов базового класса (вызовом соответствующего конструктора со списком необходимых аргументов); другим указателям назначьте адреса объектов производного класса. В едином цикле сформируйте общий сводный отчет по объектам обоих классов. Изучив вывод программы, убедитесь в том, что хотя все указатели являются указателями на базовый класс, но для объектов каждого класса (базового или производного) вызывается соответствующий вариант виртуальной функции Print(), что дает возможность обрабатывать в одном цикле массивы объектов как базового, так и любого количества различных производных классов.

Работа №12. Потоки ввода-вывода

Воспользуйтесь в качестве заготовки программой из работы №9 (индивидуальное задание С). Удалите из класса описание перегруженного оператора сложения. Модифицируйте функции Draw1() и Draw2() так, чтобы первая выводила в окно заданную фигуру толстым цветным пером, а вторая – тонким черным. Объявите в качестве глобальных переменных четыре указателя на объекты вашего класса. В части а работы будет использоваться одна пара этих указателей; в части б – другая.

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

а. Запись объекта на диск и чтение с диска традиционными файловыми функциями Windows. Включите в функцию OnCreate() предложения создания файла, записи в него содержимого вашего объекта, сброса указателя в файле в начало файла и чтения данных с диска в созданный заранее второй (неинициализированный) объект. В функции OnPaint() выведите (разными функциями Draw()) изображения обоих объектов – исходного и заполненного данными с диска. Убедитесь в совпадении изображений.

б. Запись объекта на диск и чтение с диска с помощью потоков ввода-вывода. Подключите к программе заголовочный файл <fstream.h>. Создайте в функции OnCreate()третий объекта вашего класса с отличным набором аргументов и четвертый – “пустой”. Создайте поток файлового вывода – объект класса ofstream, указав в аргументах конструктора новое имя файла. Вызовом функции write() для объекта потока запишите в файл содержимое объекта. В качестве аргументов этой функции указывается адрес объекта, приведенный к типу char*, и размер объекта в байтах. Закройте поток вывода.

Создайте поток файлового ввода – объект класса ifstream. Вызовом функции read() для этого объекта прочитайте данные с диска в четвертый (неинициализированный) объект. В функции OnPaint() выведите в окно изображения обоих объектов. Убедитесь в совпадении изображений.

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