Sunteți pe pagina 1din 7

Lucrarea de laborator nr.

2
Tema: Supraîncărcarea operatorilor.

1.1 Scopul lucrării:

- Studierea necesităţii supraîncărcării operatorilor;


- Studierea sintaxei de definire a operatorilor;

- Studierea tipurilor de operatori;

- Studierea formelor de supraîncărcare;

1.2 Sarcina lucrării:

Să se creeze o clasă de numere întregi. Să se definească operatorii "++" şi "+", ca metode ale
clasei, iar operatorii "- -" şi "-" ca funcţii prietene. Operatorii trebuie să permită efectuarea
operaţiilor atît cu variabilele clasei date, cît şi cu variabilele întregi de tip predefinit.

2 Indicații teoretice

Supraincărcarea operatorilor

In C, operatorul * poate fi utilizat cu diferite inţelesuri: inmulţire de int-uri, inmulţire de long-uri,


inmulţire de float-uri, indirectare etc. Spunem despre operatorul * că este supraincarcat. In C++,
utilizatorul poate adăuga el operatorilor noi inţelesuri. De exemplu, am putea adăuga operatorului
* inţelesul de inmulţire dintre un punct din plan şi un scalar. Declaraţia unui astfel de operator
este asemănătoare cu cea a unei funcţii:

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 funcţii este prezenţa 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 defineşte o relaţie de

ordine parţială 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 supraincărca ş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 urmăm pașii:


 declarăm tipul structură intreg cu câmpul: n de tip int și constructorul acestei clase.

 În această clasă suptaîncarc operatorul + și ++. (++ are rol de a=a+5)

 Operatorii -- - << îi supraîncarc în afara clasei, dar le definesc ca friend pentru


clasa dată.

 În main declar 2 variabile de tipul clasei intreg și testez toti operatorii


supraincărcati.

Testăm programul.

Codul sursă și rezultatele obținute 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;

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 rulării programului.

Concluzii
La această lucrare de laborator au fost folosite în practică cunoștințele obținute la curs în
domeniul supraîncărcării operatorilor. Am observat utilitatea folosirii acesteia este majoră
deoarece avem posbilitatea de a defini funcțiile operatorilor pentru tipurile de date necesare.

Bibliografie
Sergiu G. Istrati “Programare. Inițializare în limbajele C și C++. Ciclu de prelegeri la
disciplina “Programare”” Chișinău U.T.M. 2003