Вы находитесь на странице: 1из 8

Programarea n limbajul C++

LUCRARE DE LABORATOR NR.

Tema: Suprancrcarea operatorilor


Scopul lucrrii:
Studierea necesitii suprancrcrii operatorilor;
Studierea sintaxei de definire a operatorilor;
Studierea tipurilor de operatori;
Studierea formelor de suprancrcare;
Noiuni de baz
Avantajul utilizrii operatorilor (reducerea codului) n acelai timp complic nelegerea
codului, deoarece nu este posibil ntotdeauna sau este complicat s se urmreasc dac se
utilizeaz un operator predefinit sau suprancrcat. ns suprancrcarea operatorilor este
necesar. Sunt probleme care se soluioneaz numai prin suprancrcarea operatorilor,cum ar fi
operatorul de atribuire. Desigur
. , .
. , ,
, Assign ( Java). ,
.
,
, ,
:

class Book{
char* name;
public:
Book(char n){
name = new char[strlen(n)+1];
strcpy(name,n);
}
~Book(){
delete[] name;
}
void print(){
cout<<name;
}
};
void main(){
Book b(Stroustrup), b2(Lippman);
b2 = b;
b.print();
b2.print();
}

, .
, , ( Lippman)
, (

Programarea n limbajul C++


).
, ,
.
, ,
, ,
, ,
. , ,

.
, , , ,
.

?
.
operator, .
, .
Complex operator+(const Complex& r){
return Complex(re+r.re,im+r.im);
}

, ,
:
Complex c1,c2,c3;
c3=c1+c2;
//
c3=c1.operator+(c2); //


: 1.
. & , ++ - , ! . : +
- , * - .
,
( ). , ++ i++, ++i.
? :
:
Complex& operator++();
Complex operator++(int);

//
//


: (
) .
, . :
, ,
, . ?:.
1

Programarea n limbajul C++


?
? ?
, , <<
. , .
, this.
- , .
. <<
ostream .
- , ,
.
.

. ,

. :
., .*, ?:, ::, sizeof, #, ##.

, :
->, [], (), new new[], delete delete[] .

, "=", "[]", "()"


"->" .
->,
, .
. 2


:
- ,
;
- ;
- void;
operator();
- ;

,
.
2

Programarea n limbajul C++


-

operator() ,
.

Programarea n limbajul C++


:
1.
2.
3.
4.
5.

?
?
?
?

?
6.
?
7.
?
8.
"()"?
9.
"->"?
10.
(
)?
11.
"<<"?
12.
?
Sarcina
Varianta 1
) 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.
b) S se creeze o clas Set mulimea numerelor ntregi, utiliznd memoria dinamic. S se
defineasc operatorii de lucru cu mulimile: "+" uniunea, "*" intersecia, "-" scderea, ca
funcii prietene, iar "+=" nserarea unui nou element n mulime, "==" comparare la
egalitate, . a. ca metode ale clasei. S se defineasc operatorii "<<" i ">>". S se defineasc
funcia de verificare a apartenenei unui element la o mulime.
Varianta 2
) S se creeze clasa 2-D de coordonate n plan. S se defineasc operatorii "+" i "-" ca funcii
prietene, iar operatorii de atribuire i de comparare ca metode ale clasei. De prevzut
posibilitatea efecturii operaiilor att ntre coordonate, ct i ntre coordonate i numere
obinuite.
b) S se creeze clasa Stack stiv, utiliznd memoria dinamic. S se defineasc urmtorii
operatori ca metode ale clasei: "+" de adunare a dou stive, "=" de atribuire, "()" de
returnare a unei stive noi care conine ultimele n elemente ale stivei date. S se defineasc
operatorii de comparare: "==", "!=", "<", ">" ca funcii prietene. Pentru realizarea ultimilor doi
operatori s se defineasc funcia de calcul a normei elementelor stivei. S se defineasc
operatorii "<<" i ">>" pentru ieiri/intrri de obiecte. Clasa trebuie s fie absolut funcional,
adic s conin toi constructorii necesari i destructorul.
Varianta 3
) S se creeze clasa 3-D de coordonate n spaiu. S se defineasc operatorii "+", "-", "=", ca
metode ale clasei, iar operatorii de comparare ca funcii prietene. De prevzut posibilitatea
realizrii de operaii att ntre coordonate ct i ntre coordonate i numere obinuite.

Programarea n limbajul C++


b) S se creeze clasa Queue coad, utiliznd memoria dinamic. S se defineasc operatorii
"+" de adunare a dou cozi, "=" de atribuire ca metode ale clasei. S se defineasc
operatorii de comparare "==", "!=", "<", ">" ca funcii prietene. Pentru realizarea ultimilor doi
operatori s se defineasc funcia de calcul a normei elementelor cozii. S se defineasc
operatorii "<<" i ">>" pentru ieiri/intrri de obiecte, precum i pentru inserarea/eliminarea
elementelor n/din coad.
Varianta 4
) S se creeze clasa Date data, care conine cmpurile: ziua, luna, anul. S se defineasc
operatorii "+" i "-" ca metode ale clasei, iar operatorii "++" i "--" n ambele variante(prefix
i postfix) ca funcii prietene. Operatorul "+" trebuie s permit realizarea operaiilor numai
cu variabilele de tip predefinit int (x=y+5). De prevzut prelucrarea corect a anilor biseci.
b) S se creeze clasa List coad. S se defineasc operatorii "+" de adunare a listelor, "="
de atribuire ca metode ale clasei. S se defineasc operatorii de comparare "==", "!=", "<", ">"
ca funcii prietene. S se suprancarce operatorii "<<" i ">>" pentru ieiri/intrri de obiecte,
precum i pentru inserarea/eliminarea elementelor n/din coad. Clasa trebuie s fie absolut
funcional, adic s conin toi constructorii necesari i destructorul. Pentru simplificarea
lucrului s se utilizeze clasa sau structura ListItem pentru reprezentarea elementelor listei spre
care refer List.
Varianta 5
) S se creeze clasa numerelor reale. S se defineasc operatorii "++" i "+" ca metode ale
clasei, iar operatorii "- -" i "-" ca funcii prietene. Operatorii trebuie s permit realizarea
operaiilor att cu variabilele clasei date, ct i cu variabilele de tip predefinit double.
b) S se creeze clasa Vector vector, utiliznd memoria dinamic. S se defineasc operatorii
"+" adunarea element cu element a vectorilor, "-" scderea element cu element a vectorilor,
"=" atribuirea ca metode ale clasei. S se defineasc operatorii de comparare: "==", "!=", "<",
">" ca funcii prietene. Pentru realizarea ultimilor doi operatori s se defineasc funcia de
calcul a modulului elementelor vectorului. S se suprancarce operatorii "<<" i ">>" pentru
ieiri/intrri de obiecte. Clasa trebuie s conin toi constructorii necesari i destructorul.
Varianta 6
) S se creeze clasa numerelor mari ntregi. S se defineasc operatorii "+" i "*" ca metode
ale clasei, iar "-" i "/" - ca funcii prietene. S se suprancarce operatorii de incrementare i de
decrementare n ambele forme (prefix i postfix). Operatorii trebuie s permit realizarea
operaiilor att cu variabilele clasei date, ct i cu variabilele de tip predefinit long.
b) S se creeze clasa Matrix matrice, utiliznd memoria dinamic. S se defineasc operatorii
"+" adunarea matricilor, "-" scderea matricilor, "=" atribuirea ca metode ale clasei. S se
defineasc operatorii de comparare: "==", "!=", "<", ">" ca funcii prietene. Pentru realizarea
ultimilor doi operatori s se defineasc funcia de calcul a normei elementelor matricei. S se
defineasc operatorul "[]" astfel nct s fie cu sens adresarea [][] la elemente. S se
suprancarce operatorii "<<" i ">>" pentru ieiri/intrri de obiecte.
Varianta 7
) S se creeze clasa Bool variabile logice. S se defineasc operatorii "+" SAU logic, "*"
I logic, "^" SAU EXCLUSIV, ca metode ale clasei, iar operatorii "==" i "!=" ca funcii
6

Programarea n limbajul C++


prietene. Operatorii trebuie s permit realizarea operaiilor att cu variabilele clasei date, ct i
cu variabilele de tip predefinit int. (Dac numrul ntreg este diferit de zero, se consider c
variabila este adevr, altfel fals.)
b) S se creeze clasa String ir, utiliznd memoria dinamic. S se defineasc operatorii "+"
adunarea irurilor, "=" i "+=" atribuirea ca metode ale clasei. S se defineasc operatorii de
comparare: "==", "!=", "<", ">" ca funcii prietene. Operatorii trebuie s lucreze att cu String,
ct i cu char*. S se defineasc operatorul "[]" de acces la fiecare simbol n parte. S se
suprancarce operatorii "<<" i ">>" pentru ieiri/intrri de obiecte.
Varianta 8
) S se creeze clasa Complex numere complexe. S se defineasc toi operatorii dintr-un
simbol ca funcii prietene, iar operatorii ce constau din dou simboluri ca metode ale clasei.
Excepie operatorul de atribuire, care poate fi numai metod a clasei i operatorii pentru
ieiri/intrri de obiecte. Adunarea i scderea trebuie realizat att cu numere complexe ct i cu
tipul predefinit double.
b) S se creeze clasa Stack stiv, utiliznd memoria dinamic. S se defineasc urmtorii
operatori ca metode ale clasei: "+" de adunare a dou stive, "=" de atribuire, "()" de
returnare a unei stive noi care conine ultimele n elemente ale stivei date. S se defineasc
operatorii de comparare: "==", "!=", "<", ">" ca funcii prietene. Pentru realizarea ultimilor doi
operatori s se defineasc funcia de calcul a normei elementelor stivei. S se defineasc
operatorii "<<" i ">>" pentru ieiri/intrri de obiecte. Clasa trebuie s fie absolut funcional,
adic s conin toi constructorii necesari i destructorul
Varianta 9
) S se creeze clasa Time timpul, care conine cmpurile: ore, minute, secunde. S se
defineasc operatorii "+" i "-", ca funcii prietene, iar "++" i "--" n ambele forme (prefix i
postfix) ca metode ale clasei. Operatorii trebuie s permit realizarea operaiilor att cu
variabilele clasei date, ct i cu variabilele de tip predefinit int (desemneaz secundele).
b) S se creeze clasa Queue coad, utiliznd memoria dinamic. S se defineasc operatorii
"+" de adunare a dou cozi, "=" de atribuire ca metode ale clasei. S se defineasc
operatorii de comparare "==", "!=", "<", ">" ca funcii prietene. Pentru realizarea ultimilor doi
operatori s se defineasc funcia de calcul a normei elementelor cozii. S se defineasc
operatorii "<<" i ">>" pentru ieiri/intrri de obiecte, precum i pentru inserarea/eliminarea
elementelor n/din coad.
Varianta 10
) S se creeze clasa Bool variabile logice. S se defineasc operatorii "+" SAU logic, "*"
I logic, "^" SAU EXCLUSIV, ca funcii prietene, iar operatorii "==" i "!=" ca metode ale
clasei. Operatorii trebuie s permit realizarea operaiilor att cu variabilele clasei date, ct i cu
variabilele de tip predefinit int. (Dac numrul ntreg este diferit de zero, se consider c
variabila este adevr, altfel fals.)

Programarea n limbajul C++


b) S se creeze o clas Set mulimea numerelor ntregi, utiliznd memoria dinamic. S se
defineasc operatorii de lucru cu mulimile: "+" uniunea, "*" intersecia, "-" scderea, ca
metode ale clasei, iar "+=" nserarea unui nou element n mulime, "==" comparare la
egalitate, . a. ca funcii prietene. S se defineasc operatorii "<<" i ">>". S se defineasc
funcia de verificare a apartenenei unui element la o mulime.
Varianta 11
) S se creeze clasa Date data, care conine cmpurile: ziua, luna, anul. S se defineasc
operatorii "+" i "-" ca metode ale clasei, iar operatorii "++" i "--" n ambele variante(prefix
i postfix) ca funcii prietene. Operatorul "+" trebuie s permit realizarea operaiilor numai
cu variabilele de tip predefinit int (x=y+5). De prevzut prelucrarea corect a anilor biseci.
b) S se creeze clasa String ir, utiliznd memoria dinamic. S se defineasc operatorii "+"
adunarea irurilor, "=" i "+=" atribuirea ca funcii prietene. S se defineasc operatorii de
comparare: "==", "!=", "<", ">" ca metode ale clasei. Operatorii trebuie s lucreze att cu
String, ct i cu char*. S se defineasc operatorul "[]" de acces la fiecare simbol n parte. S
se suprancarce operatorii "<<" i ">>" pentru ieiri/intrri de obiecte.
Varianta 12
) S se creeze clasa 2-D de coordonate n plan. S se defineasc operatorii "+" i "-" ca funcii
prietene, iar operatorii de atribuire i de comparare ca metode ale clasei. De prevzut
posibilitatea efecturii operaiilor att ntre coordonate, ct i ntre coordonate i numere
obinuite.
b) S se creeze clasa List coad. S se defineasc operatorii "+" de adunare a listelor, "-"
de scdere( ca la mulimi) ca funcii prietene. S se defineasc operatorii de comparare "==", "!
=", "<", ">" ca metode ale clasei. S se suprancarce operatorii "<<" i ">>" pentru ieiri/intrri
de obiecte, precum i pentru inserarea/eliminarea elementelor n/din coad. Clasa trebuie s fie
absolut funcional, adic s conin toi constructorii necesari i destructorul. Pentru
simplificarea lucrului s se utilizeze clasa sau structura ListItem pentru reprezentarea
elementelor listei spre care refer List.

Вам также может понравиться