Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-is-ab:laboratoare:05 [2025/10/25 17:40]
razvan.cristea0106 [Operatorii limbajului C++]
poo-is-ab:laboratoare:05 [2025/11/01 11:58] (current)
razvan.cristea0106 [Supraîncărcarea operatorilor]
Line 33: Line 33:
 În continuare vom prezenta un tabel cu operatorii existenți în limbajul C++ pentru a putea vedea atât simbolurile cât și modul de asociere (aplicare) al acestora. În continuare vom prezenta un tabel cu operatorii existenți în limbajul C++ pentru a putea vedea atât simbolurile cât și modul de asociere (aplicare) al acestora.
  
-^        Categoria de operatori ​       ^       ​Simbolurile operatorilor ​            ​^ ​                Mod de asociere (aplicare) ​             ​^    Prioritate ​   ​+^        Categoria de operatori ​       ^       ​Simbolurile operatorilor ​            ​^ ​                Mod de asociere (aplicare) ​             ^ 
-| **Primari** ​           | ( ), [ ], ., %%->%% |         ​stânga - dreapta ​        |        ↑        ​+| **Primari** ​           | ( ), [ ], ., %%->%% |         ​stânga - dreapta ​        | 
-| **Unari** ​             | ++, %%--%%, -, !, ~, (tip), &, *, sizeof |         ​**dreapta - stânga** ​        |        ↑        ​+| **Unari** ​             | ++, %%--%%, -, !, ~, (tip), &, *, sizeof |         ​**dreapta - stânga** ​        | 
-| **Multiplicativi** ​    | *, /, %                         ​| ​        ​stânga - dreapta ​        |        ↑        ​+| **Multiplicativi** ​    | *, /, %                         ​| ​        ​stânga - dreapta ​        | 
-| **Adunare, scădere** ​  | +, -                            |         ​stânga - dreapta ​        |        ↑        ​+| **Adunare, scădere** ​  | +, -                            |         ​stânga - dreapta ​        | 
-| **Deplasare (nivel bit)** | %%<<​%%,​ %%>>​%% ​              ​| ​        ​stânga - dreapta ​        |        ↑        ​+| **Deplasare (nivel bit)** | %%<<​%%,​ %%>>​%% ​              ​| ​        ​stânga - dreapta ​        | 
-| **Relaționali** ​       | <, >, %%<=%%, %%>​=%% ​           |         ​stânga - dreapta ​        |        ↑        ​+| **Relaționali** ​       | <, >, %%<=%%, %%>​=%% ​           |         ​stânga - dreapta ​        | 
-| **Testare egalitate** ​ | ==, !=                          |         ​stânga - dreapta ​        |        ↑        ​+| **Testare egalitate** ​ | ==, !=                          |         ​stânga - dreapta ​        | 
-| **ȘI (nivel bit)** ​    | &                               ​| ​        ​stânga - dreapta ​        |        ↑        ​+| **ȘI (nivel bit)** ​    | &                               ​| ​        ​stânga - dreapta ​        | 
-| **SAU exclusiv (nivel bit)** | %%^%%                     ​| ​        ​stânga - dreapta ​        |        ↑        ​+| **SAU exclusiv (nivel bit)** | %%^%%                     ​| ​        ​stânga - dreapta ​        | 
-| **SAU inclusiv (nivel bit)** | %%|%%                     ​| ​        ​stânga - dreapta ​        |        ↑        ​+| **SAU inclusiv (nivel bit)** | %%|%%                     ​| ​        ​stânga - dreapta ​        | 
-| **ȘI logic** ​          | %%&&​%% ​                         |         ​stânga - dreapta ​        |        ↑        ​+| **ȘI logic** ​          | %%&&​%% ​                         |         ​stânga - dreapta ​        | 
-| **SAU logic** ​         | %%||%% ​                         |         ​stânga - dreapta ​        |        ↑        ​+| **SAU logic** ​         | %%||%% ​                         |         ​stânga - dreapta ​        | 
-| **Condițional (ternar)**| ?:                             ​| ​        ​stânga - dreapta ​        |        ↑        ​+| **Condițional (ternar)**| ?:                             ​| ​        ​stânga - dreapta ​        | 
-| **Atribuire** ​         | =, +=, -=, *=, /=, %=, %%<<​=%%,​ %%>>​=%%,​ &=, %%^=%%, %%|=%% |         ​**dreapta - stânga** ​        |        ↑        ​+| **Atribuire** ​         | =, +=, -=, *=, /=, %=, %%<<​=%%,​ %%>>​=%%,​ &=, %%^=%%, %%|=%% |         ​**dreapta - stânga** ​        | 
-| **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**, 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 **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';​
poo-is-ab/laboratoare/05.1761403217.txt.gz · Last modified: 2025/10/25 17:40 by razvan.cristea0106
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0