This is an old revision of the document!
Laborator 03 - Notiuni avansate de C++
Obiective
În urma parcurgerii acestui laborator studentul va:
afla funcționalitățile claselor/funcțiilor prietene
realiza supraîncărcarea operatorilor din C++
înțelege conceptul de copy constructor
înțelege conceptul de rule of three
[5p] Implementati clasa Fractie, cu următoarele particularități:
[2p] doi constructori:
primul vid
al doilea va primi ca argumente numitorul și numărătorul
Se vor implementa funcţii membre pentru:
[0.5p] determinarea numitorului și numărătorului
[1p] supraîncărcarea operatoriilor de comparație <, >, == (aveți grijă la egalitatea a două fracții)
[0.5p] supraîncărcarea operatorilor +, -
[bonus 1p] Supraîncărcați operatorii ++ și – unari astfel încât numărul rațional reprezentat să crească/scadă cu o unitate. Căutați să vedeți cum se face diferența între ++ prefixat și postfixat.
[5p] Implementaţi clasa template Vector care să permită lucrul cu vectori de obiecte, cu următoarele particularități:
Vor exista doi constructori:
primul, vid, va inițializa numărul de elemente la 0 și pointerul de elemente la NULL
al doilea va primi ca argument numărul de elemente și va aloca memorie pentru pointer
[0.5p] Se va defini și un destructor, care va dezaloca memoria alocată dinamic
Se vor implementa funcţii friend (nemembre) pentru:
[1p] testul de egalitate a doi vector ( supraîncărcarea operatorului == )
[0.5p] supraîncărcarea operatorului « (pentru scriere)
[0.5p] supraîncărcarea operatorului » (pentru citire)
Se vor implementa funcţii membre pentru:
[1p] supraîncărcarea operatorului de atribuire între două obiecte de tip vector
[0.5p] supraîncărcarea operatorului de indexare [] ce va permite accesul la elementele individuale prin indexare Operatorul de indexare este un operator binar, având ca prim termen obiectul care se indexează, iar ca al doilea termen indicele. (obiect[indice]
este interpretat ca obiect.operator[](indice)
.
Tipul parametrului pentru copy-constructor trebuie să fie identic cu cel al parametrului pentru operatorul de assignment
[4p] Implementaţi clasa template Set care să permită lucrul cu mulțimi de obiecte, cu următoarele particularități:
Constructorul va primi dimensiunea maximă de elemente care pot fi ținute în mulțime și va aloca spațiul necesar.
[0.5p] Se va defini și un destructor, care va dezaloca memoria alocată dinamic.
Se vor implementa funcţii membre pentru:
[1p] supraîncărcarea operatorului += pentru adăugarea unui nou element în mulțime (dacă elementul există deja în mulțime atunci nu va mai fi adăugat).
[0.5p] supraîncărcarea operatorului -= pentru eliminarea unui element din mulțime.
Se vor implementa funcţii friend (nemembre) pentru:
[1p] testul de egalitate a două mulțimi ( supraîncărcarea operatorului == ): două mulțimi sunt egale daca conțin aceleași elemente.
[0.5p] supraîncărcarea operatorului « (pentru scriere).
[0.5p] supraîncărcarea operatorului » (pentru citire).