Sunteți pe pagina 1din 7

Universitatea Tehnic a Moldovei

Facultatea Calculatoare Informatic i Microelectronic

Catedra:Microelectronic i Inginerie Biomedical.

Lucrare de laborator
Tema: Suprancrcarea operatorilor.

Chiinau 2013

1.1 Scopul lucrrii:


- Studierea necesitii suprancrcrii operatorilor;
- Studierea sintaxei de definire a operatorilor;
- Studierea tipurilor de operatori;
- Studierea formelor de suprancrcare;
1.2 Sarcina lucrrii:
S se creeze o clas de numere ntregi. S se defineasc operatorii "++" i "+", ca metode ale
clasei, iar operatorii "- -" i "-" ca funcii prietene. Operatorii trebuie s permit efectuarea
operaiilor att cu variabilele clasei date, ct i cu variabilele ntregi de tip predefinit.
2 Indicaii teoretice
Supraincrcarea operatorilor
In C, operatorul * poate fi utilizat cu diferite inelesuri: inmulire de int-uri, inmulire de long-uri,
inmulire de float-uri, indirectare etc. Spunem despre operatorul * c este supraincarcat. In C++,
utilizatorul poate aduga el operatorilor noi inelesuri. De exemplu, am putea aduga operatorului
* inelesul de inmulire dintre un punct din plan i un scalar. Declaraia unui astfel de operator
este asemntoare cu cea a unei funcii:
struct punct
{
int x,y;
};
punct operator * (int a, punct p)
{
punct q;
q.x = a * p.x;
q.y = a * p.y;
return q;
}

Singura deosebire fa de funcii este prezena cuvantului cheie operator


intre tipul rezultatului returnat de operator i numele operatorului. Un alt
operator care ar fi util pentru puncte ar fi cel care definete o relaie de
ordine parial peste puncte:
bool operator <=(punct p, punct q)
{
return (p.x <= q.x && p.y <= q.y);
}
punct a,b;
a.x = 1; a.y = 2;
b = 5 * a;
if (a <= b) cout << mai mic" << endl;
else cout << incomparabil" << endl;
Se pot supraincrca i operatori unari. De exemplu putem defini p ca
returnand punctul (-p.x, -p.y):
punct operator - (punct p)
{
punct temp;
temp.x = -p.x;
temp.y = -p.y;
return q;
}

3 Realizarea sarcinii
La scrierea programului urmm paii:
declarm tipul structur intreg cu cmpul: n de tip int i constructorul acestei clase.
n aceast clas suptancarc operatorul + i ++. (++ are rol de a=a+5)
Operatorii -- - << i suprancarc n afara clasei, dar le definesc ca friend pentru
clasa dat.
n main declar 2 variabile de tipul clasei intreg
supraincrcati.
Testm programul.
Codul surs i rezultatele obinute sunt prezentate mai jos.
#include<iostream>
#include<string.h>
#include<conio.h>
using namespace std;
class intreg
{
int n;
public:
intreg(){ n=0;

intreg(int g){ n=g;}


intreg operator++(int)
{
intreg temp(*this);
n=n+5; //inloc de incrementare are loc adunarea cu 2
return temp;
}

i testez toti operatorii

intreg operator+(const intreg &b)


{intreg t;
t.n=n+b.n-1; // a+b-1
return t;
}
friend intreg operator--(intreg &b);
friend intreg operator-(const intreg &a,const intreg &b);
friend ostream &operator << (ostream &os, intreg &a);
};
intreg operator--(intreg &b)
{
return b.n=b.n-5;
}
intreg operator-(const intreg &a,const intreg &b)
{
return a.n-b.n+1;
}
ostream &operator << (ostream &os, intreg &a)
{
return os << a.n ;
}
void main(){
mian:
system("CLS");
int a,b;

cout << "Introduceti 2 numere: \n a= ";


cin >> a;
cout << " b= ";
cin >> b;
intreg A(a), B(b), z;
cout<< " Rezultatul :"<< endl;
cout << "a++ (a=a+5)\n ";
cout << a << "++ = ";
A++;
cout<<A;
cout << "\n\na+b (a+b-1)";
z=A+B;
cout <<endl<< A << " + " << B << " = " << z << endl;
cout << "\nb-- (b=b-5)\n ";
cout << B << "-- =" ;
B--;
cout << B ;
cout << "\n\na-b (a-b+1) ";
z=A-B;
cout <<endl<< A << " - " << B << " = " << z <<endl;
cout << "\n\nExit? 1 ";
if( getch()=='1')exit(1);
else goto mian;
}

Fig.1. Reultatul rulrii programului.

Concluzii
La aceast lucrare de laborator au fost folosite n practic cunotinele obinute la curs n
domeniul suprancrcrii operatorilor. Am observat utilitatea folosirii acesteia este major
deoarece avem posbilitatea de a defini funciile operatorilor pentru tipurile de date necesare.

Bibliografie
Sergiu G. Istrati Programare. Iniializare n limbajele C i C++. Ciclu de prelegeri la
disciplina Programare Chiinu U.T.M. 2003