Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра ПЗ
Звіт
з лабораторної роботи №5
за курсом “Об’єктно-орієнтоване програмування”
Львів
2008
Лабораторна робота №5
Тема: Перевантаження функцій і операцій. Дружні функції
Мета: навчитися перевантажувати функції та операції, а також працювати з дружніми функціями;
зрозуміти основні властивості та правила роботи з ними.
Варіант №10
Виконання роботи
1.Постановка задачі.
Написати програму алгоритмічною мовою С++ згідно із завданням, отриманим від викладача відповідно до варіанту. Реалізувати заданий класовий тип із заданими методами, використовуючи механізм перевантаження функцій та операцій, а також значення параметрів за замовчуванням. Написати фрагмент програми з використанням класового типу та заданих методів.
Завдання:
Трикутник на координатній площині [p1;p2;p3]
Конструктор повинен визначати довільний або рівносторонній трикутник в центрі координат. Визначення периметра. Перевантажити операції ==, виводу <<, вводу >>, а також дружню операцію += для переміщення трикутника на [dx; dy].
2.Текст програми.
Файл: Main.cpp
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include "Triangle.h"
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
void main()
{float Ax2,Ay2,Bx2,By2,Cx2,Cy2,P2;
float Ax1,Ay1,Bx1,By1,Cx1,Cy1,P1;
Triangle T2,T1;
printf("Vvedit' koordynaty pershoho trykutnyka: A(x,y),B(x,y),C(x,y)\n");
cin >> T2;
printf("Vvedit' koordynaty druhoho trykutnyka: A(x,y),B(x,y),C(x,y)\n");
cin >> T1;
P2=T2.GetPerum();
printf("Perymetr 1 trykutnyka %f\n",P2);
P1=T1.GetPerum();
printf("Perymetr 2 trykutnyka %f\n",P1);
if (T2==T1)
printf("Trykutnyky odnakovi\n");
else
printf("Trykutnyky rizni\n");
if (T2.GetOzn()==1)
printf("Trykutnyk 1 rivnostoronnij\n");
else
printf("Trykutnyk 1 NE rivnostoronnij\n");
if (T1.GetOzn()==1)
printf("Trykutnyk 2 rivnostoronnij\n");
else
printf("Trykutnyk 2 NE rivnostoronnij\n");
float Z2[2],Z1[2];
printf("Vyznachte zsuv 1 trykutnyka (x,y): ");
scanf("%f%f",&Z2[0],&Z2[1]);
T2 += Z2;
printf("\nVyznachte zsuv 2 trykutnyka (x,y): ");
scanf("%f%f",&Z1[0],&Z1[1]);
T1 += Z1;
cout << T2;
cout << T1;
getch();
}
//---------------------------------------------------------------------------
Файл: Triangle.cpp
#include <math.h>
#include "Triangle.h"
#pragma hdrstop
//---------------------------------------------------------------------------
float Triangle::GetPerum()
{float P;
AB=sqrt(pow((B[0]-A[0]),2)+pow((B[1]-A[1]),2));
BC=sqrt(pow((C[0]-B[0]),2)+pow((C[1]-B[1]),2));
AC=sqrt(pow((A[0]-C[0]),2)+pow((A[1]-C[1]),2));
P=AB+BC+AC;
return P;
};
//---------------------------------------------------------------------------
int Triangle::operator ==(Triangle &T1)
{if ((T1.A[0]-A[0])==(T1.A[1]-A[1])==(T1.B[0]-B[0])==(T1.B[1]-B[1])==(T1.C[0]-C[0])==(T1.B[1]-B[1]))
return 1;
else
return 0;
};
//---------------------------------------------------------------------------
int Triangle::GetOzn()
{if (AB==BC==AC)
Ozn=1;
else
Ozn=0;
return Ozn;
};
//---------------------------------------------------------------------------
void operator +=(Triangle &TT,float *P)
{TT.A[0]=TT.A[0]+*P; TT.A[1]=TT.A[1]+*(P+1);
TT.B[0]=TT.B[0]+*P; TT.B[1]=TT.B[1]+*(P+1);
TT.C[0]=TT.C[0]+*P; TT.C[1]=TT.C[1]+*(P+1);
};
//---------------------------------------------------------------------------
void operator >> (istream &in,Triangle &T1)
{in >> T1.A[0] ;
in >> T1.A[1] ;
in >> T1.B[0] ;
in >> T1.B[1] ;
in >> T1.C[0] ;
in >> T1.C[1] ;
};
//---------------------------------------------------------------------------
void operator << (ostream &out,Triangle&T1)
{out << T1.A[0] << " ";
out << T1.A[1] << " ";
out << T1.B[0] << " ";
out << T1.B[1] << " ";
out << T1.C[0] << " ";
out << T1.C[1] << " ";
out << "\n";
};
//---------------------------------------------------------------------------
#pragma package(smart_init)
Файл: Triangle.h
#ifndef TriangleH
#define TriangleH
#include <iostream.h>
//---------------------------------------------------------------------------
class Triangle
{protected:
float A[2],B[2],C[2];
float AB,BC,AC;
int Ozn;
public:
float GetPerum();
int operator ==(Triangle &T1);
int GetOzn();
friend void operator +=(Triangle &TT,float *P);
friend void operator <<(ostream &out,Triangle &T);
friend void operator >>(istream &in,Triangle &T);
};
//---------------------------------------------------------------------------
#endif
3.Протокол роботи програми.
Висновок: на цій лабораторній роботі я навчитися перевантажувати функції та операції, а також
працювати з дружніми функціями, зрозумів основні властивості та правила роботи з перевантаженням функцій та операцій, а також особливості роботи дружніх функцій.