Sunteți pe pagina 1din 6

Lucrarea de laborator nr.

5
Tema: Suprancrcarea operatorilor in limbajul C++
1. Scopul lucrrii
Scopul lucrrii de laborator - obinerea deprinderilor practice n crearea i utilizarea operatorilor
suprancrcai n limbajul C++.
2. Teme pentru studiu prealabil
Introducere n clase;
Suprancrcarea funciilor;
Suprancrcarea operatorilor.
3. Sarcina pentru executare
Sarcina de realizare:
a) s se elaboreza urmtoarele metode ale clasei: seteazaeaz(), afis(), constructori, destructor;
b) funcii de suprancrcare a urmtorilor operatori: atribuire, adunare (n cazul cmpurilor simbol prin
adunare se subnelege concatenarea), de corespundere, fluxul de intrare, fluxul de ieire.
4. Exemplu de rezolvare a problemei
Mnstirea
Cpriana
Hncu
Japca

Mnstiri din Moldova


Hramul
Din secolul
A
15
S
17
I
17

Suprafaa (ha)
18,8
24,7
12,2

Remarc: A Adormirea Maicii Domnului, S Sfnta Cuvioas Paraschiva, I nlarea Domnului.

5. Elaborarea algoritmului de soluionare


Algoritmul programului este liniar.
5.1. Definirea structurii clasei.
5.1.1. Descrierea cmpurilor clasei.
Pentru realizarea condiiilor sarcinii vom avea nevoie de clasa manastiri cu metodelele-accesorii din lucrarea
precedent. Amintim, c clasa manastiri conine urmtoarele cmpuri:
nume - char * .
hramul - tipul acestui cmp a suferit modificri, conform condiiilor noi. Pentru realizarea suprancrcrii
operatorului sum i realizarea corect a programului, tipul cmpului este definit ca char * . Aceasta poate
fi explicat prin faptul, c la suprancrcarea operatorului sum este necesar de realizat concatinarea
cmpurilor simbol.
secolul - unsigned int.
suprafaa - float.
5.1.2. Metodele clasei i funcii friend.
Clasa manastiri are urmtoarele funcii - membre:
void seteaza(char *a,char *b,unsigned int ,float );
void tipareste( );
manastiri operator = (manastiri &o1);
int operator == (manastiri &o1);
manastiri operator + (manastiri &o1);
manastiri() { suprafata=0; count=0;}
manastiri(char *a, char *b, unsigned int &c, float &d);
Clasa manastiri are urmtoarele funcii friend:
1

friend ostream & operator<<(ostream &stream, manastiri &o1);


friend istream & operator>>(istream &stream, manastiri &o1).

5.2. Elaborarea programului


Pentru comoditate se declar o constant, care reprezint numrul de obiecte ale clasei manastiri. Cu alte
cuvinte, vom lucra cu un tablou de obiecte al clasei manastiri de dimensiuea N. #define N 3
Vom trece la descrierea funciilor definite mai sus:
Menionm, c funciile seteaza, tipareste sunt luate din lucrarea de laborator precedent fr modificri.
Funcia manastiri operator = (manastiri o1); reproduce suprancrcarea operatorului de atribuire.
Realizeaz aciunea de atribuire a cmpurilor unui obiect altui obiect din aceiai clas. La suprancrcare
operatorului binar, operandul stng se transmite funciei implicit, iar operatorul drept se transmite n calitate de
argument. Tipul returnat nsi clasa manastiri. Pentru un lucru corect cu irurile este necesar s alocm memorie
dinamic i s-o lichidm. n ntregime aceast funcie este analogic funciei seteaza.
Funcia int operator == (manastiri o1); permite stabilirea corespunderii ntre obiectele clasei. Corpul ei
include verificarea egalitii mrimilor cmpurilor numerice i compararea irurilor, care se realizeaz cu ajutorul
funciei strcmp, dac obiectele sunt egale funcia returneaz 0 altfel 1.
Funcia manastiri operator + (manastiri o1); returneaz un obiect de tipul manastiri. Menionm faptul, c
obiectul temporar tr este utilizat ca argument local n funcia operator+(), pentru pstrarea rezultatelor i constituie
obiectul returnat.
n situaia dat + a fost suprancrcat prin metoda, analogic utilizrii aritmeticii tradiionale. De
aceia a fost important, ca nici un operand s nu se modifice. De exemplu, cnd adunai 10+4, rezultatul este egal cu
14, pe cnd nici 10 i nici 4 nu se modific. Astfel, obiectul temporar este necesar pentru pstrarea rezultatului.
friend ostream & operator<<(ostream &stream, manastiri &o1);
Primul operator este o trimitere la obiectul de tipul ostream. Aceasta nseamn, c fluxul stream trebuie s
fie fluxul de ieire. Al doilea parametru primete obiectul extras. Atragei atenia, c funcia de ieire returneaz
trimiterea ctre fluxul stream, ce are tipul ostream. Aceasta este necesar, dac operatorul suprancrcat << va fi
utilizat ntr-un ir de expresii consecutive de intrare/ieire.
friend istream & operator>>(istream &stream, manastiri &o1);
Funcia returneaz o trimitere la fluxul istream, care este fluxul de intrare. Primul parametru tot este o
trimitere la fluxul de intrare. Al doilea parametru - este trimitere ctre obiectul, ce primete informaia de intrare.
La fel, ca i funcia de ieire, funcia de intrare nu poate fi funcie membru. Cu toate c n aceast funcie
poate fi realizat orice operaie, dar mai bine este s limitm lucrul ei la introducerea informaiei.
Funcia, descris mai sus efectueaz verificarea datelor, care sunt introduse de utilizator. Verific
corespunderea numerelor cu numrul de nregistrri n variabila de tipul clasei.
Textul integral al programului este prezentat mai jos.

Lucrare de laborator nr.5


Suprancrcarea operatorilor n limbajul C++.
Varianta nr.30
Exemplu de soluionare

S-ar putea să vă placă și