This shows you the differences between two versions of the page.
|
poo-is-ab:laboratoare:05 [2025/10/25 17:10] razvan.cristea0106 [Supraîncărcarea operatorilor] |
poo-is-ab:laboratoare:05 [2025/11/01 11:58] (current) razvan.cristea0106 [Supraîncărcarea operatorilor] |
||
|---|---|---|---|
| Line 50: | Line 50: | ||
| | **Virgulă** | , | stânga - dreapta | | | **Virgulă** | , | stânga - dreapta | | ||
| - | <note important>Pentru operatorii din tabelul de mai sus am ales această ordine pentru a putea stabili cu ușurință **prioritățile** fiecăruia dintre ei. Astfel cea mai **mică** prioritate o are operatorul **virgulă**, în timp ce cea mai **mare** prioritate o au **operatorii primari**.</note> | + | <note important>Pentru operatorii din tabelul de mai sus am ales această ordine pentru a putea stabili cu ușurință **prioritățile** fiecăruia dintre ei. Astfel cea mai **mică** prioritate o are **operatorul virgulă**, în timp ce cea mai **mare** prioritate o au **operatorii primari**.</note> |
| ==== Funcții friend ==== | ==== Funcții friend ==== | ||
| Line 56: | Line 56: | ||
| În C++ funcțiile **friend** sunt acele funcții care au aces la zona **privată** a clasei, dar și la cea **protected**. Deși o funcție friend strică **principiul încapsulării datelor**, trebuie menționat că acest lucru este controlat. | În C++ funcțiile **friend** sunt acele funcții care au aces la zona **privată** a clasei, dar și la cea **protected**. Deși o funcție friend strică **principiul încapsulării datelor**, trebuie menționat că acest lucru este controlat. | ||
| - | <note tip>Pentru a înțelege mai bine rolul funcțiilor **friend**, imaginați-vă următoarea analogie: fiecare dintre voi are un set de gânduri și sentimente care sunt **private**, **inaccesibile** celorlalți. Totuși, ca ființe sociale, avem prieteni cărora alegem să le împărtășim aceste gânduri. Deși prietenii noștri **au acces** la informații personale, acest lucru **nu** înseamnă că oricine poate avea acces la ele. Voi sunteți cei care **dețineți controlul total** asupra a ceea ce **dezvăluiți** și **cui**.</note> | + | <note tip>Pentru a înțelege mai bine rolul **funcțiilor friend**, putem privi lucrurile astfel: fiecare dintre noi are un set de gânduri și sentimente care sunt **private**, **inaccesibile** celorlalți. Totuși, ca ființe sociale, avem prieteni cărora alegem să le împărtășim o parte din aceste gânduri. Deși prietenii noștri **au acces** la informații personale, acest lucru **nu** înseamnă că oricine le poate vedea. **Noi** suntem cei care **deținem controlul total** asupra a ceea ce **dezvăluim** și mai ales **cui**.</note> |
| Pentru a declara o funcție de tip **friend**, folosim cuvântul cheie **friend**. Aceste funcții sunt declarate în interiorul clasei și au cuvântul cheie **friend** plasat **înaintea tipului de return** al funcției. | Pentru a declara o funcție de tip **friend**, folosim cuvântul cheie **friend**. Aceste funcții sunt declarate în interiorul clasei și au cuvântul cheie **friend** plasat **înaintea tipului de return** al funcției. | ||
| Line 346: | Line 346: | ||
| { | { | ||
| return this->real != z.real || this->imaginar != z.imaginar; | return this->real != z.real || this->imaginar != z.imaginar; | ||
| + | /*return !(*this == z) // o varianta mai eleganta de a nega rezultatul intors de operatorul == pentru a nu duplica codul*/ | ||
| } | } | ||
| </code> | </code> | ||
| Line 540: | Line 541: | ||
| <code cpp> | <code cpp> | ||
| - | istream& operator>>(istream& in, NrComplex& z) | + | std::istream& operator>>(std::istream& in, NrComplex& z) |
| { | { | ||
| std::cout << "Introduceti partea reala a numarului complex: "; | std::cout << "Introduceti partea reala a numarului complex: "; | ||
| Line 551: | Line 552: | ||
| } | } | ||
| - | ostream& operator<<(ostream& out, const NrComplex& z) | + | std::ostream& operator<<(std::ostream& out, const NrComplex& z) |
| { | { | ||
| out << "Partea reala a numarului complex este: " << z.real << '\n'; | out << "Partea reala a numarului complex este: " << z.real << '\n'; | ||