Uploaded by Виктор Фокин

Лаба5ооп

advertisement
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение
высшего образования «Тульский государственный университет»
Институт прикладной математики и компьютерных наук
Кафедра вычислительной техники
Отчёт по лабораторной работе №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
Download