Файл: Работа с иерархией объектов наследование и полиморфизм.docx

ВУЗ: Не указан

Категория: Отчет по практике

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 44

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра Вычислительной техники

ОТЧЕТ

по лабораторной работе № 1

по дисциплине «Алгоритмы и структуры данных»

Тема: Работа с иерархией объектов: наследование и полиморфизм

Студенты гр. 1305




Кривенко В.А.







Рахматулин М.М.








Смирнов К.В.

Преподаватель




Колинько П. Г.


Санкт-Петербург

2023

Цель работы.

Ознакомиться с наследованием в языке программирования C++ и создать класс-наследник для фигуры “Трапеция” (рис. 1), и дополнить лицо, получающееся в результате работы изначально данной программы, бакенбардами и рогами, являющимися трапециями.


Трапеция. Рисунок 1.

Задание (вариант 5)

Доработать модуль shape.cpp, добавив в коллекцию ещё одну фигуру. Для этой фигуры нужно определить подходящее место в иерархии классов и написать недостающие функции-члены. Разработанной фигурой нужно дополнить картинку в указанных в варианте позициях.

Для примыкания фигур должны использоваться их габаритные точки. Необходимо написать аналоги функции up (поместить p над q), обеспечивающие примыкание очередной фигуры p с нужной стороны по отношению к уже размещенной q. Это должны быть обычные функции, а не функции-члены класса, чтобы их можно было применять для любых объектов.

В результате прогона программа должна последовательно продемонстрировать:

  1. исходный набор фигур, включая добавленные, которые следует расположить так, чтобы они по возможности не перекрывались; для добавления нескольких одинаковых фигур можно использовать конструктор копии, предусмотрев в нём смещение на экране изображения копии относительно оригинала;

  2. результат подготовки фигур к сборке: изменение размеров, отражения, повороты; для вновь добавленных фигур должны быть продемонстрированы все заложенные для них возможности для трансформации;

  3. собранное изображение физиономии со всеми заданными добавками.



Класс trapezoid

Был создан класс trapezoid, который представляет собой трапецию, которая наследуется от двух классов: rotatable и reflectable. Переменные p1, p2, p3 и p4 представляют собой левую нижнею, правую нижнею, левую верхнюю и правую верхнюю точки трапеции.

Были переопределены функции-члены rotate_right, rotate_left, flip_horizontally, flip_vertically. Функции были написаны с учётом того, что трапеции изначально инициализируются с помощью точек, образующих две параллельные прямые.

Также были переопределены функции-члены move, resize и draw. Для переопределения функций-членов north, south, east, west, neast, seast, nwest и swest были написаны функции max_y, min_y, max_x, min_x для вычисления крайних точек трапеции.
Иерархия классов

Иерархия классов фигур представлена на рисунке 2.



Иерархия классов. Рисунок 2.

Результат работы программы



Рисунок 3. Генерация фигур


Рисунок 4. Изменения размеров фигур, их поворот и отражение



Рисунок 5. Готовая фигура – физиономия с бакенбардами и рогами
Вывод.

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

Был создан класс trapezoid, который позволяет выводить на экран повернутые и отраженные трапеции, представляющие собой бакенбарды и рога. В качестве потомков были выбраны классы rotatable и reflectable и реализованы их виртуальные функции-члены для поддержки иерархическую связь классов в разработанной программе.