Sunteți pe pagina 1din 4

Ministerul Educaţiei, Culturii și Cercetării al Republicii

Moldova

Universitatea Tehnică a Moldovei


Disciplina: PROGRAMAREA ORIENTATĂ PE OBIECTE

RAPORT
Lucrarea de laborator nr. 3
Tema: Supraîncărcarea operatorilor

A efectuat:
st. gr. CR-191 Trifan Petru
A verificat: Lisnic Inga

Chişinău – 2020
Scopul lucrării:
 Studierea necesităţii supraîncărcării operatorilor;
 Studierea sintaxei de definire a operatorilor;
 Studierea tipurilor de operatori;
 Studierea formelor de supraîncărcare;

Teorie
Este supraincarcarea operatorilor importanta? – Da , supraincararea operatorilor e
importanta, astfel noi putem invata operatorii de a lucra cu tipuri abstracte ca si cum ar fi tipuri
de baza.
Ce cuvinte cheie sunt utilizate pentru supraincarcarea operatorilor? – Numele clasei la care
redefinim operatorul , tip rezultatului daca il returneza , cuv. Cheie operator si insasi operatorul.
Pot operatorii sa returneze rezultat ? – Da, operatorii pot returna rezultat .

Cum se clasifica operatorii? –


- Aritmetici
- Relationali
- Logici
- Pe biti
Dupa numar(unar , binari , ternari)
In cazul supraincarcarii exista operatori care se supraincarca si operatori care nu se supraincarca.
Cum compilatorul intelege prefixarea si postfixarea operatorilor binari?
Pentru a distinge postfixarea de prefixarea dor ii transmitem ca parametru cuv cheie int .
Complex operator++(); // preincrement
Complex operator++(int); // postincrement
Care operatori nu pot fi supraincarcati: ‘#’ , ‘::’ , ’;’ , ‘;’ , ‘.’, ‘{}’ , ‘* ca operator de
dereparare’ , ‘&pentru preluare adresei’ , ‘sizeof’ , ‘ternar’
Nu se recomanda sa fie supraincarcati: ‘new’ , ‘delete’, ’[]’ , ‘()’ , ‘new’ , ‘new[]’ , ‘delete’ ,
‘delete[]’
Care este sintaxa de utilizare a operatorilor? – Sintaxa ramine aceeasi ca si la tipurile
predefinite , atunci cind utilizam operatorul pentru tipul abstract compilatorul utilizeaza
operatorul redefinit de noi.
Cum este utilizat operatorul “()” - Operatorul se foloseste in mod diferit si la prima vedere
poate fi confundat cu constructorul clasei.
Cum se utilizeaza operatorul “->” – Operatorul dat este folosit p/u indicare parametrilor clasei.
De ce este nevoie de 2 metode de supraincarcare: ca metoda a clasei si ca functie prietena?
– Se utilizea 2 tipuri de supraincarcare p/u ca operatorul care dorim sa-l predefinim deja apartine
unei clase de sistem (ex operatori de intrare si iesire aprtin clasei istream si respecti ostream) de
aceea sunt utlizate ca functii prietene.
La care tip apartine operatorul “<<” Operatorul dat apatine la tipul operatorilr de
intrare/iesire care ase supraincarca su ajutorul functiilor pritetene .
In ce cazuri trebuie numaidecit de supraincarcat operatorul de atribuire? – Cind alocam
dinamic memoria.
Program A:
#include <iostream>
#include <ostream>

using namespace std;

class cord2d {
private:
int x, y;
public:
cord2d() {
x = 0;
y = 0;
};
cord2d(int a, int b) {
x = a;
y = b;
};
friend cord2d operator+(const cord2d, const cord2d);
friend cord2d operator+(const cord2d, int);
friend ostream& operator<<(ostream&, const cord2d);

bool operator< (const cord2d& a)const {


if ((x + y) < (a.x + a.y))
return 1;
else
return 0;
}
bool operator> (const cord2d& a)const {
if ((x + y) > (a.x + a.y))
return 1;
else
return 0;
}
bool operator== (const cord2d& a)const {
if ((x + y) == (a.x + a.y))
return 1;
else
return 0;
}
};

cord2d operator+ (const cord2d a, const cord2d b) {


cord2d c(a.x + b.x, a.y + b.y);

return c;
}
cord2d operator+ (const cord2d a, int x) {
cord2d c(a.x + x, a.y + x);

return c;
}
ostream& operator<<(ostream& os, const cord2d a) {
os << "X = " << a.x << " Y = " << a.y;

return os;
}

int main()
{
cord2d a(-1, 2);
cord2d b(4, 5);

cout << a + b << endl;


cout << a + 10 << endl;

return 0;
}