LAB4PPPO (Лабораторная работа №4)
Описание файла
Файл "LAB4PPPO" внутри архива находится в следующих папках: Лабораторная работа №4, [ООП - 2 курс] Лабораторная работа №4. Документ из архива "Лабораторная работа №4", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "LAB4PPPO"
Текст из документа "LAB4PPPO"
4
ООП – Большаков С.А. 2008/2009Требования к ЛР № 4 по курсу ООП
(3 курс ИУ5 5 семестр 2008 г.)
“Наследование, виртуальные функции и абстрактные классы”
-
Цель работы
Целью лабораторной работы является дополнительное изучение оболочки (IDE) системы программирования BC 3.1 C++ , способов наследования классов, использование виртуальных функций, понятий абстрактного класса и виртуального вызова функций. Студенты создают свои классы и исследуют механизмы вызова виртуальных функций. Учатся проектировать собственные классы и отображать результаты на диаграммах классов и объектов.
-
Изучаемые вопросы
В процесса лабораторной работы( она рассчитана на 4 часа) необходимо изучить и выполнить:
-
Порядок и особенности работы с оболочкой: использование отладчика и средств просмотра классов;
-
Выполнить описание четырех собственных классов (Absrt, Deriv1 ,Deriv2 и Deriv3 названия классов нельзя изменять), связанных следующим образом: Absrt - абстрактный класс, наследованный от Object ( из classlib); Deriv1 - наследуется от Absrt, Deriv2 наследуется от Deriv1, Deriv3 наследуется от Deriv1.
-
Классы Deriv1 ,Deriv2 и Deriv3, не являются абстрактными и имеют, по крайней мере, одну виртуальную функцию, определенную в классе Absrt как чистая виртуальная функция (тело такой функции обозначается так - "=0").
-
Построить диаграмму наследования классов для ЛР.
-
Описать объекты классов Absrt, Deriv1 ,Deriv2 и Deriv3(названия фиксированы - a1, d1, d2, d3) и выполнить их инициализацию и инициализацию указателей на эти типы, которые описываются отдельно( pa1, pd1, pd2, pd3);
-
Построить диаграмму объектов для лабораторной работы.
-
Выполнить вызовы виртуальных функций всех классов и объектов через имена объектов и указатели, в том числе через указатель на базовый абстрактный класс( pa1) – это виртуальный вызов!!!.
-
Занести объекты разных типов в один список типа LIST (из classlib см. ЛР 3).
-
Распечатать списка с помощью цикла, функции printOn и собственной виртуальной функции print , на основе класса LISTITERATOR.
-
Порядок работы
Для выполнения лабораторной работы в полном объеме студенты должны выполнить следующие действия и пункты:
-
Продолжить изучение оболочки BC 3.1 C++ в интерактивном режиме( всех пунктов меню и окон настройки работы оболочки)
-
Составить диаграммы классов своей программы
-
Составление блок-схемы и написание программы, состоящей из двух исходных файлов.
-
Составить диаграмму объектов собственной программы
-
Освоить редактирование текстов в среде оболочки для много модульных программ, используя броузер классов для поиска необходимых модулей.
-
Создать и грамотно настроить проектный файл для программы ЛР, во втором файле должна быть выделена функция для вывода справки о программ (на COUT) с номером варианта, группой и ФИО студента.
-
Отладить программу с помощью отладчика с просмотром объектов классов
-
Сформировать листинг программы и листинг результатов
-
Оформить отчет по ЛР.
-
Требования к работе
В лабораторной работе в изложенном ниже порядке должны быть отражены следующие требования:
Обязательные требования:
-
Описание четырех классов( Absrt, Deriv1 ,Deriv2 и Deriv3), требования к которым описаны выше (см. 1-й пункт вариантов).
-
В классе Absrt определяется свойство, задаваемое вариантом (см. 2-й пункт вариантов).
-
В классах должна быть определена и переопределена виртуальная функция print, для печати переменной и названия класса объекта.
-
Описать объекты классов Absrt, Deriv1 ,Deriv2 и Deriv3( a1, d1, d2, d3) и их инициализация и указателей на эти типы( pa1, pd1, pd2, pd3);
-
Выполнить вызов функции print для имен объектов ( d1, d2, d3).
-
Задаются значения указателей( pd1, pd2, pd3) и выполняется вызов функции print для этих указателей.
-
Задается значение pa1 как указатель на d1 и вызывается функции print через этот указатель. Задается значение pa1 как указатель на d2 и вызывается функции print через этот указатель. Задается значение pa1 как указатель на d3 и вызывается функции print через этот указатель( виртуальный вызов !!).
-
Описать объект типа список LIST ListDerive.
-
Тремя циклами в список ( add) последовательно заполнить по пять объектов каждого из типов Deriv1 ,Deriv2 и Deriv3. Объекты порождаются оператором new. Все объекты должны быть различимы.
-
Выполнить распечатку списка с помощью цикла (с использованием класса LISTITERATOR см. 3ЛР) и функции printOn, перегруженной в классах Deriv1 ,Deriv2 и Deriv3( current, restart, int).
-
Выполнить распечатку списка с помощью одного цикла (с использованием класса LISTITERATOR см. 3ЛР) и функции print, перегруженной в классах Deriv1 ,Deriv2 и Deriv3( используя current, restart, int) и вычисляемого указателя на базовый класс (pa1). Для примера ссылки: (( Absrt*) &AI.current())->print();
-
Выполнить удаление элементов из общего списка по вариантам (см. 3-й пункт вариантов).
Дополнительные требования (выполняются по желанию сильными студентами):
-
Все тоже с классами DOUBLELIST и DOUBLELISTITERATOR;
-
Продемонстрировать использование виртуального класса на примере.
-
Оформление отчета
В отчет по ЛР должно быть включено:
-
Титульный лист, цель и порядок работы
-
Перечень ошибок при отладке
-
Диаграмма классов созданных классов и диаграмма объектов программы
-
Листинг программы и листинг результатов
-
Варианты (см. таблицу вариантов)
Для индивидуализации задания студента введены вариантные требования, смысл которых раскрывается ниже. Окончательный вариант задания выделен в таблице.
Вариантные требования:
-
Создание всех новых классов с помощью указателей или без (1 – без указателя, 1В – с указателем)
-
В классе Absrt определяется свойство (2В)
-
Типа int (2.1В)
-
Типа char[20] (2.2В)
-
Типа double (2.3В)
-
По завершению в одном цикле по списку удалить объекты классов, заданных ниже, и распечатать результат (3В)
-
Deriv1 и Deriv3 (3.1В)
-
Deriv2 и Deriv3 (3.2В)
-
Deriv1 и Deriv2 (3.3В)
Варианты | 7,8,11,13,14,17,19,24,25,29 * | 1,2,5,6,9,12,16,20, 21,27 * | 3,4,10,15,18,22,23,26, 28, 30 * |
ИУ5- 61 | 1B, 2.3В, 3.3В | 1B, 2.1В, 3.3В | 1B, 2.2В, 3.1В |
ИУ5- 62 | 1B, 2.2В, 3.2В | 1В, 2.3В, 3.2В | 1В, 2.2В, 3.3В |
ИУ5- 63 | 1В, 2.3В, 3.1В | 1В, 2.1В, 3.2В | 1B, 2.1В, 3.3В |
ИУ5- 64 | 1В, 2.3В, 3.1В | 1В, 2.1В, 3.2В | 1B, 2.2В, 3.1В |
* - номер в списке.
Примечание: Комбинация – 1B,2.2В,3.2В – означает:
-
использование указателя для создания массива(1B),
-
в классе Absrt определяется свойство типа char[20] (2.2В),
-
удаляются и печатаются объекты классов Deriv2 и Deriv3 (3.2В).
-
Контрольные вопросы к ЛР №4
-
Поясните структуру классов программы по диаграмме классов?
-
Поясните структуру объектов программы по диаграмме объектов?
-
Что такое абстрактный класс? Пример.
-
Почему нельзя создавать объекты абстрактных классов?
-
Что такое перегрузка функций С++?
-
Что такое перегрузка операций в С++?
-
Что такое виртуальная функция ( ВФ)? Чистая ВФ? Пример по программе.
-
Что такое виртуальный вызов? Его преимущество?
-
Поясните записи – “pAbs ->print();” и “d2.print();”?
-
Поясните запись – “(( Abstr *) &LAI.current())->print();”?
-
Что такое виртуальный вызов? Покажите в программе.
-
Зачем для виртуального вызова нужен указатель на базовый класс?
-
В чем преимущества виртуального вызова для разработчиков программ?
-
Для чего нужен файл *.DEF в проекте?
-
Как обеспечить совместное использование программ С и С++?
-
Что такое виртуальный класс?
-
Что такое виртуальный деструктор? Как их можно использовать?
-
Чем отличается статическое и динамическое связывание?
-
В чем состоят преимущества динамического связывания, и как они могут использоваться в программах?
Срок сдачи ЛР № 4 - 9-я неделя семестра.