Professional Documents
Culture Documents
5.OOP Preklapanje Operatora
5.OOP Preklapanje Operatora
programiranje
1. Operatorske funkcije
Preklapanje operatora
n Ukoliko nad obektima klase treba izvoditi neke operacije
nalik onima koje su definisane u programskom jeziku za
standardne tipove definiu se operatorske funkcije.
n Operatorske funkcije nose ime operator@
q simbol @predstavlja neki operator ugra#en u jezik
n Operatorske funkcije se mogu definisati
q Unutar klase,
q Kao samostalne (globalne funkcije).
Operatorske funkcije $lanice klase
n Ukoliko je operatorska funkcija definisana u klasi, njen
prvi operand je skriven to je objekat za koji se
funkcija poziva.
n Definisanje binarnog operatora u klasi:
<tip> operator@( <tip> desni );
n Definisanje unarnog operatora u klasi:
<tip> operator@( );
Operatorske funkcije $lanice klase - primer
//Time.h
class Time
{
public:
Time( int, int, int );
Time operator+( const Time& t );
Time operator-( const Time& t );
Time opeator~();
...
private:
int hour;
int minute;
int second;
};
Operatorske funkcije $lanice klase - primer
//Time.cpp
#include Time.h;
Time Time::operator+( const Time& t )
{
Time rez;
rez.second = this->second + t.second;
rez.minute = this->minute + t.minute + rez.second/60;
rez.hour = this->hour + t.hour + rez.minute/60;
rez.second %= 60;
rez.minute %= 60;
rez.hour %= 24;
}
Time Time::operator~( )
{
return Time( 60 - this->second, 60 - this->minute,
24 - this->hour );
}
Poziv operatrskih funkcija
n Na nain kako se primenjuju i operatori definisani
u programskom jeziku:
Time t1(2,50,30), t2(5,30,45), t3, t4;
t3 = t1+t2;
t4 = ~t3;
n Na nain kako se poziva bilo koja funkcija lanica
klase:
t3 = t1.operator+(t2);
t4 = t3.operator~();
Operatorske funkcije kao samostalne
(globalne) funkcije
n Svaka operatorska funkcija koja mo&e da bude
implementirana kao $lanica klase, mo&e da bude
imlementirana i kao samostalna funkcija.
n Operatorska funkcija kod koje prvi operand nije objekat
klase koju mi razvijamo se jedino mo&e implementirati
kao samostalna funkcija.
n Definisanje samostalnih operatorskih funkcija:
q Za binarne operatore:
<tip1> operator@( <tip2> levi, <tip3> desni );
q Za unarne operatore
<tip1> operator@( <tip2> operand );
Operatorske funkcije kao samostalne
(globalne) funkcije - primer
//Time.h
class Time
{
public:
Time( int, int, int );
friend Time operator*( int k, const Time& t );
friend istream& operator>>(istream& in, Time& t);
...
private:
int hour;
int minute;
int second;
};
Operatorske funkcije kao samostalne
(globalne) funkcije - primer
Time operator*( int k, const Time& t )
{
Time rezult;
rezult.second = k * t.second;
rezult.minute = k * t.minute + rezult.second/60;
rezult.hour = k * t.hour + result.minute/60;
rezult.second %= 60;
rezult.minute %= 60;
rezult.hour %= 24;
return rezult;
}
istream& operator>>(istream& in, Time& t)
{
in >> t.hour >> t.minute >> t.second;
return in;
}
Preklapanje operatora =
n Podrazumevani operator =
q Prosto prepisivanje svih atributa jednog objekta u odgovaraju(e
atribute drugog
q Neprivatljiv kada postoje atributi u dinami$koj zoni memorije.
n Ukoliko objekat sadr&i nizove u dinami$koj zoni
memorije:
q Obrisati stari niz,
q Kreirati novi odgovaraju(e dimenzije,
q Prepisati elemente.
q Napomena: Obavezno proveriti da li se objekti koji u$estvuju u
izrazu razlikuju.
Primer: Operator =u klasi Vektor
class Vector
{
public:
private:
int n;
int* a;
};
Primer: Operator =u klasi Vektor
//implementacija u .cpp fajlu:
Vector& Vector::operator=(Vector& v)
{
if ( this != &v )
{
this->n = v.n;
delete [] a;
a = new int[n];
for( int i=0; i<n; i++ )
a[i]=v.a[i];
}
return *this;
}
Preklapanje operatora ++ i --
n Ovi operatori mogu biti:
q Prefiksni,
q Postfiksni.
n Razlikovanje prefiksnih i postfiksnih operatora:
q Postfiksnim operatorima se dodaje fiktivni argument tipa int.
n Ne koristi se u implementaciji funkcije,
n Ozna$ava samo na$in pozivanja funkcije.
Primer: Operatori ++i u klasi Time
class Time
{
public: