МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «Тульский государственный университет» Институт прикладной математики и компьютерных наук Кафедра вычислительной техники Отчёт по лабораторной работе №5 По дисциплине: «Объектно-ориентированное программирование» «Наследование в объектно-ориентированных программах на языке С++» Выполнил студент группы 220612: ___________Семин Е.А. Проверил заведующий каф. ВТ: __________ Ивутин А.Н. Тула 2023 1 Цель работы Ознакомление с работой механизма наследования при различных способах управления доступом, с использованием явных и неявных преобразований типов данных при наследовании, а также с правилами доступа к функциям-элементам базового и производного классов. 2 Задания на лабораторную работу Разработать базовый класс Point и производный класс Rect (прямоугольник)., позволяющие использовать их в следующей программе: Point p1, p2(3,11), p3=p2; (p2.move(10,10)).print(); p3.print(); p1=p2; Rect r1, r2(p1,p2), r3=r2; cout <<r3<<square(r3); r2=r3.move(5,8); Написать тексты h-файла и cpp-файла для классов Point и Rect. Разработать и отладить программу создания и использования объектов классов Point и Rect. 3 Результаты выполнении всех пунктов задания Создадим проект «Lab5» и добавим в него все необходимые «исходные файлы» и «файлы заголовков». Код программы Rect.h #ifndef Rect_H #define Rect_H using namespace std; class Rect : public Point { private: Point LU; Point RD; friend ostream& operator<<(ostream& os, const Rect& r); friend int square(Rect r); //friend void* square(Rect r); public: Rect() { LU.x = 0;LU.y = 1;RD.x = 1;RD.y = 0; }; Rect(Point p1LU,Point p2RD) { LU.x = p1LU.x;LU.y = p1LU.y;RD.x = p2RD.x;RD.y = p2RD.y; }; void operator = (Rect r); //friend ostream& operator<<(ostream&, const Rect&); Rect move(int x, int y) { this->LU.move(x, y);this->RD.move(x, y);Rect r(this->LU, this>RD); return r; }; }; ostream& operator<<(ostream& os, const Rect& r) { os << "first point: " << r.LU << "second point: " << r.RD << "\n"; return os; } void Rect::operator = (Rect r) { r.LU = this->LU;r.RD = this->RD; } int square(Rect r) { return fabs(((r.RD.x - r.LU.x) * (r.LU.y - r.RD.y))); } #endif Код программы Point.h 2 #ifndef Point_H #define Point_H using namespace std; class Point { private: int x; int y; friend void print(); friend ostream& operator<<(std::ostream& os, const Point& p); friend class Rect; friend int square(Rect r); public: Point() { x = 0;y = 0; }; Point(int x1, int y1) { x = x1;y = y1; }; void operator =(Point p); Point move(int x1, int y1) { this->x += x1; this->y += y1;Point p(this->x, this>y);return p; }; ostream& print(ostream & os) { os << "(" << x << ";" << y << ")";return os; } }; ostream& operator<<(std::ostream& os, const Point& p) { os << "(" << p.x << "; " << p.y << ");\n"; return os; } void Point::operator =(Point p) { this->x = x;this->y = y; } Код программы Lab4.cpp #include <iostream> #include "Point.h" #include "Rect.h" using namespace std; int main() { /*Point p1(10, 10), p2(15,5),p3=p2; Rect r1(p1, p2); p1.move(10, 10);*/ Point p1, p2(3, 11), p3 = p2; (p2.move(10, 10)).print(cout); p3.print(cout); p1 = p2; Rect r1, r2(p1, p2), r3 = r2; cout << r3 << square(r3); r2 = r3.move(5, 8); } Пример работы программы представлен на рисуноке 2. Рисунок 2 - Пример работы программы 3 ЗАКЛЮЧЕНИЕ Ознакомился с работой механизма наследования при различных способах управления доступом, с использованием явных и неявных преобразований типов данных при наследовании, а также с правилами доступа к функциям-элементам базового и производного классов. 4