Работа с иерархией объектов: наследование и полиморфизм
Автор: qwertyuyu • Июль 28, 2023 • Лабораторная работа • 1,370 Слов (6 Страниц) • 125 Просмотры
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра Вычислительной техники
ОТЧЕТ
по лабораторной работе № 1
по дисциплине «Алгоритмы и структуры данных»
Тема: «Работа с иерархией объектов: наследование и полиморфизм»
Студенты гр. | ||
Преподаватель |
Санкт-Петербург
2021
Содержание
Задание 3
Добавленные классы 3
Переопределённые функции-члены 3
Недоступные функции-члены 3
Результат работы 3
Список использованной литературы 7
Цель работы
Изучить иерархию и наследование классов в языке С++.
Задание
Вариант 2: Добавить фигуру номер 15 (параллелограмм с крестом) на позиции 1, 14 (галстук и шишак).
Добавленные классы
Для выполнения поставленной задачи был добавлен класс cross_parallelogram, унаследованный от класса reflectable. Поскольку параллелограмм нужно отразить, то наследование требуется именно от этого
класса, а не от класса shape.
Переопределённые функции-члены
Для выполнения задания были переопределены следующие функции:
- north(), south(), east(), west(), neast(), seast(), nwest(), point swest() –
для получения координат вершин параллелограмма
- move() – для того, чтобы перемещать параллелограмм
- draw() – для вывода параллелограмма на экран
Недоступные функции-члены
Доступны все функции-члены.
Результат работы
Пример работы программы представлен на рисунках 1-3.
[pic 1]
Рис.1.
[pic 2]
Рис. 2.
[pic 3]
Рис. 3.
Вывод: Проведя данную лабораторную работу, было изучено, как можно работать с иерархией классов, как наследовать классы и как оптимизировать работу с объектами. Были получены знания о работе с наследуемыми классами и принципах их дополнения функциями-членами.
Текст программы
#include "screen.h"
#include "shape.h"
#include <iostream>
using namespace std;
//put shape p below shape q
void down(shape& p, const shape& q)
{
point n = q.south();
point s = p.north();
p.move(n.x - s.x, n.y - s.y - 1);
}
class myshape : public rectangle { // Моя фигура ЯВЛЯЕТСЯ
int w, h; // прямоугольником
line l_eye; // левый глаз – моя фигура СОДЕРЖИТ линию
line r_eye; // правый глаз
line mouth; // рот
public:
myshape(point, point);
void draw();
void move(int, int);
void resize(double);
line eye(int n) {
if (n == 0) return l_eye;
else return r_eye;
}
};
myshape::myshape(point a, point b)
: rectangle(a, b), //Инициализация базового класса
w(neast().x - swest().x + 1), // Инициализация данных
h(neast().y - swest().y + 1), // - строго в порядке объявления!
l_eye(point(swest().x + 2, swest().y + h * 3 / 4), 4),
r_eye(point(swest().x + w - 6, swest().y + h * 3 / 4), 4),
mouth(point(swest().x + 2, swest().y + h / 4), w - 4)
{ }
void myshape::draw()
{
rectangle::draw(); //Контур лица (глаза и нос рисуются сами!)
...