- •Разработка объектно-ориентированных программ
- •Методические указания
- •1. Методология программирования
- •1.1. Методология объектно-ориентированного
- •1.2. Методология объектно-ориентированного анализа
- •2. Особенности программирования в среде Windows
- •2.1 Разработка объектно-ориентированных программ
- •2.2. Разработка объектно-ориентированных программ
- •4. Лабораторный практикум
- •4.1. Лабораторная работа 1.
- •Общие сведения
- •Лабораторное задание
- •Варианты лабораторных заданий
- •Контрольные вопросы
- •4.2. Лабораторная работа 2.
- •Общие сведения
- •Лабораторное задание
- •Варианты лабораторных заданий
- •4.3. Лабораторная работа 3.
- •Общие сведения
- •Лабораторное задание
- •Варианты лабораторных заданий
- •4.4. Лабораторная работа 4.
- •Общие сведения
- •Лабораторное задание
- •4.5. Лабораторная работа 5.
- •Общие сведения.
- •Лабораторное задание
- •Варианты лабораторных заданий
- •4.6. Лабораторная работа 6.
- •Общие сведения.
- •Лабораторное задание
- •Варианты лабораторных заданий
- •4.7. Лабораторная работа 7.
- •Общие сведения.
- •Лабораторное задание.
- •Приложение а. Спецификации api-функций.
- •Приложение б. Основные классы mfc.
4.4. Лабораторная работа 4.
Перегрузка операций.
Цель работы: изучить механизм перегрузки операций как один из принципов реализации полиморфизма и приобрести навыки переопределения операций.
Общие сведения
Чтобы определить @, где @ - некоторая операция языка С++, для каждого определяемого пользователем типа необходимо определить функцию с именем operator@, которая получает параметры соответствующего типа. При этом операция @ становится членом класса, в котором она определена, с соответствующим атрибутом видимости. Для обозначения операции @ могут быть использованы знаки операций, определенные в С++ для встроенных типов. При удачном определении операций исходный код объектно-ориентированной программы становится более компактным и более понятным.
Лабораторное задание
Необходимо реализовать класс, организующий список объектов классов, описанных в лабораторной работе №3, и дополнительно определить в нем следующие операции:
добавление элемента в список;
удаление элемента из списка;
очистка списка.
Дополнить программу из л/р 3 кодом, реализующим указанные операции.
Тип проекта – Win32 Application (без MFC).
Контрольные вопросы
С какой целью выполняется переопределение операций?
Как переопределить операцию в языке С++?
Какие знаки не могут использоваться для переопределяемой операции?
Как задать приоритет переопределяемой операции?
4.5. Лабораторная работа 5.
Виртуальные функции.
Цель работы: изучить механизм виртуализации функций как один из способов реализации принципа полиморфизма в языке С++, приобрести навыки разработки и использования виртуальных функций.
Общие сведения.
Механизм виртуализации функций часто используется в том случае, когда имеется базовый класс и несколько классов, производных от него. Объекты производных классов обладают некоторым общим набором свойств и методов, но реализация некоторых общих методов различна.
В базовом классе может быть объявлена и определена функция-член с ключевым словом virtual. Это предполагает, что в каждом из производных классов может быть определена своя версия функции с тем же именем и тем же набором параметров, но выполняющая действия, специфичные для каждого конкретного производного класса. Компилятор имеет средства отслеживания типа объекта, для которого вызывается виртуальная функция, и передачи управления соответствующему варианту кода функции.
Работа с виртуальными функциями наиболее эффективна при использовании полиморфных векторов, содержащих указатели на объекты различных классов, производных от одного класса.
Примерами виртуальных функций в библиотеке MFC служат функции InitInstance(), Serialize(), DoDateExchange() и другие.
Лабораторное задание
Для каждого из указанных в л/р 1 базовых классов самостоятельно создать три производных класса (по типу производных классов, разработанных в л/р 3) и определить виртуальную функцию, реализующую изменение значений специфических свойств объектов производных классов. Тип проекта – Win32 Application (без MFC).
Варианты лабораторных заданий
Варианты базовых классов даны в задании к л/р 1.
Контрольные вопросы
Каково назначение виртуальных функций?
Каким образом осуществляется выбор требуемого варианта реализации виртуальной функции?
Что представляет собой полиморфный вектор?
В чем заключается отличие указателя на объект от ссылки на объект?
Каково назначение виртуальных функций InitInstance() и Serialize()?