Sunteți pe pagina 1din 2

Supraincarcarea functiilor si operatorilor

Polimorfism se realizeaza prin 2 mecanisme:


-static se rezolva la nivel de compilator si se denumeste prin supraincarcare sau
overloading
-dinamic se realizeaza la momentul executiei sau supradefinire/overriding
Overloading :
Double suma(int x, int y)
{ return x+y; }
Apel : Suma(2,3) sau suma(2.4,3.6) -> suma=5
Conversii implicite pt adaptare la prototip fata de supraincarcare
Se rezolva prin etapizarea calificarii functiei de apelare:
1. Cautarea versiunii cu prototip identic apelului
F(int, double) apoi se cauta in mai multe F daca exista
2. Operarea conversiilor nedegradante pentru adaptare la prototip (nu se pierde
informatie din aceasta conversie)
3. Operarea conversiilor degradante (cu pierdere de informatie din aceasta
conversie)
Pointeri -> la ceva neprecizat
4. Aplicarea conversiilor indicate de programator prin supraincarcari ale
operatorului CAST(Multe, tragere in forma)
Se realizeaza prin decorarea numelui respective
Supraincarcarea operatorilor :
If(a<b)
a<b? expr1:expr2
operator(nume operator)
p1++;
sau
operator++(p1) = functie independenta
sau
p1.operator++() = functie membra

class Pers
{
Public :
Friend const Pers & Operator++(Pers &p)
{ p.varsta++; return p; }
};
Void main()
p1++;
sau
operator++(p1);
class Pers
{
Pers & Operator++(Pers &p, int)
{ pers aux =p;
p.varsta++;
return aux;
}