Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по курсовой АЯИП (2 курс,....doc
Скачиваний:
9
Добавлен:
20.04.2019
Размер:
402.43 Кб
Скачать

4.4. Лабораторная работа 4.

Перегрузка операций.

Цель работы: изучить механизм перегрузки операций как один из принципов реализации полиморфизма и приобрести навыки переопределения операций.

Общие сведения

Чтобы определить @, где @ - некоторая операция языка С++, для каждого определяемого пользователем типа необходимо определить функцию с именем operator@, которая получает параметры соответствующего типа. При этом операция @ становится членом класса, в котором она определена, с соответствующим атрибутом видимости. Для обозначения операции @ могут быть использованы знаки операций, определенные в С++ для встроенных типов. При удачном определении операций исходный код объектно-ориентированной программы становится более компактным и более понятным.

Лабораторное задание

Необходимо реализовать класс, организующий список объектов классов, описанных в лабораторной работе №3, и дополнительно определить в нем следующие операции:

  • добавление элемента в список;

  • удаление элемента из списка;

  • очистка списка.

Дополнить программу из л/р 3 кодом, реализующим указанные операции.

Тип проекта – Win32 Application (без MFC).

Контрольные вопросы

  1. С какой целью выполняется переопределение операций?

  2. Как переопределить операцию в языке С++?

  3. Какие знаки не могут использоваться для переопределяемой операции?

  4. Как задать приоритет переопределяемой операции?

4.5. Лабораторная работа 5.

Виртуальные функции.

Цель работы: изучить механизм виртуализации функций как один из способов реализации принципа полиморфизма в языке С++, приобрести навыки разработки и использования виртуальных функций.

Общие сведения.

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

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

Работа с виртуальными функциями наиболее эффективна при использовании полиморфных векторов, содержащих указатели на объекты различных классов, производных от одного класса.

Примерами виртуальных функций в библиотеке MFC служат функции InitInstance(), Serialize(), DoDateExchange() и другие.

Лабораторное задание

Для каждого из указанных в л/р 1 базовых классов самостоятельно создать три производных класса (по типу производных классов, разработанных в л/р 3) и определить виртуальную функцию, реализующую изменение значений специфических свойств объектов производных классов. Тип проекта – Win32 Application (без MFC).

Варианты лабораторных заданий

Варианты базовых классов даны в задании к л/р 1.

Контрольные вопросы

  1. Каково назначение виртуальных функций?

  2. Каким образом осуществляется выбор требуемого варианта реализации виртуальной функции?

  3. Что представляет собой полиморфный вектор?

  4. В чем заключается отличие указателя на объект от ссылки на объект?

  5. Каково назначение виртуальных функций InitInstance() и Serialize()?