You are on page 1of 21

Objektno-orijentisano

programiranje
1. Inline funkcije
2. Prenos parametara
3. Statiki lanovi klase
Ugradjene (inline) funkcije
Kljuna re inline ispred funkcije
Nalog kompajleru da ugradi kod u program
umesto da se generie poziv funkcije
Umanjuje broj poziva funkcija
Kompajler moe da ignorie inline
Dobro za male funkcije koje se esto pozivaju
Primer:
inline double cube( double s )
{
return s * s * s;
}
Inline funkcije lanice klase
Funkcija lanica klase je ugradjena
Ako je njena implementacija navedena unutar
definicije klase, ili
Ako ispred njene deklaracije stoji kljuna re
inline, a implementacija je navedena u header
fajlu.
Inline funkcije lanice klase
class Time
{
public:
...
int getHour()
{
return hour;
}
inline void setHour( int h );
private:
...
}; // end class Time
void Time::setHour( int h )
{
hour = ( h>=0 && h<24 ) ? h : 0;
}
Prenos parametara
U jeziku C:
Prenos argumenata u funkciju - iskljuivo po vrednosti (by
value)
Ako funkcija treba da promeni vrednost spoljne promenljive:
prenosi se pokaziva na tu promenljivu,
pristup promenljivoj unutar funkcije se vri indirektnim
adresiranjem.
U jeziku C++:
Prenos argumenata u funkciju moe biti
po vrednosti (by value),
po referenci (by reference).
Prenos parametara (primer)
void f(int i, int &j) // i po vrednosti,
// j po referenci
{
i++;
j++;
}
void main()
{
int a=5; b=5;
f(a,b);
cout << After calling function f: << endl;
cout << a= << a << \tb= << b << endl;
}
Prenos parametara (primer)
After calling fubction f:
a=5 b=6
Prenos parametara (primer)
Dozvoljeni pozivi funkcije f:
int a=5; b=5;
f(a,b);
f(5,b);
f(5*a,b);
Nedozvoljeni pozivi funkcije f:
f(a,5);
f(a,5*b);
Kada treba koristiti prenos po
referenci?
Ukoliko funkcija treba da promeni spoljni
objekat,
Ukoliko zbog velicine objekta koji se prenosi
funkciji ne zelimo da se pravi njegova kopija
u memoriji
Ukoliko zelimo da zabranimo da funkcija menja
argument prenet po referenci, treba ga obeleziti
kao konstantan.
Prenos parametara
void f(Time t);
/*U trenutku poziva funkcije f pravi se lokalna kopija
objekta klase Time. Promene objekta t unutar funkcije se
ne odrazavaju na promenu objekta koji se navodi kao
stvarni argument u pozivu funkcije. */
void g(Time& t);
/*U trenutku poziva funkcije g ne pravi se lokalna kopija
objekta klase Time. t je samo drugo ime za objekat koji
se prosledjuje kao stvarni argument. Promena objekta t
unutar funkcije je, u stvari, promena njenog stvarnog
argumenta.*/
void q(const Time& t);
/*U trenutku poziva funkcije q ne pravi se lokalna kopija
objekta klase Time. t je i sada drugo ime za objekat
koji se prosledjuje kao stvarni argument, ali je taj
objekat za funkciju konstantan tj. funkcija nema pravo
da ga menja. */
Prenos rezultata funkcije po referenci
Rezultat funkcije se moe vratiti po referenci
samo ako objekat koji se vraa ivi i posle
izlaska iz funkcije.
Funkcija po referenci moe vratiti:
formalni argument koji je joj je prenet po referenci
Funkcija (lanica klase) po referenci moe
vratiti i:
Objekat klase za koji je pozvana,
Bilo koji svoj atribut.
Prenos rezultata funkcije po referenci
Funkcija po referenci ne moe vratiti
fiktivni parametar prenet po vrednosti,
lokalni objekat,
konstantu,
izraz.
Zato prenos rezultata funkcije po
referenci?
Rezultat funkcije vraen po referenci se moe
van funkcije menjati.
Uteda memorijskog prostora.
Primer prenosa rezultata funkcije po
referenci
class Vector
{
public:
int& getElement( int k ) { return a[k]; }

private:
int n;
int* a;
};
//call of the function getElement
cin >> getElement(5);
Pristup lanovima klase iz funkcija
lanica iste klase
Navodjenjem samo imena,
Korienjem imena klase i operatora ::
Korienjem pokazivaa this.
this je pokaziva na objekat za koji je funkcija
pozvana.
Pristup lanovima klase iz funkcija
lanica iste klase
Nain 1:
void Time::setHour( int h )
{
hour = ( h>=0 && h<24 ) ? h : 0;
}
Nain 2:
void Time::setHour( int h )
{
Time::hour = ( h>=0 && h<24 ) ? h : 0;
}
Nain 3:
void Time::setHour( int h )
{
this->hour = ( h>=0 && h<24 ) ? h : 0;
}
Razreavanje konflikta imena
Ukoliko je isto ime definisano na vie nivoa, potuje se njegova
unutranja definicija.
Primer:
void Time::setHour( int hour )
{
Time::hour = ( hour>=0 && hour<24 ) ? hour : 0;
}
void Time::setHour( int hour )
{
this->hour = ( hour>=0 && hour<24 ) ? hour : 0;
}
Statiki atributi klase
Kljuna re static ispred definicije atributa klase oznaava da
postoji samo jedna instanca tog atributa, bez obzira na to koliko je
objekata klase u programu kreirano.
static atribut je neka zajednika osobina svih objekata te klase.
static atribut se moe koristiti van klase i kada ni jedan objekat
klase nije kreiran navodjenjem:
<ime_klase>::<ime_static_atributa>
static atribut mora da bude definisan i na globalnom nivou.
static atribut ima vek trajanja globalnog objekta ivi za sve
vreme izvravanja programa.
Primer statikog atributa
U definiciji klase:
class A
{
public:
static int count;

};
Negde na globalnom nivou (obino u A.cpp fajlu):
int A::count;
Korienje u funkcijama lanicama klase:
... count ...
... this->count ... //nije preporucljivo
... A::count ...
Korienje van klase:
... A::count ...
Statike metode klase
Statike metode klase se ponaaju kao globalne metode. Mogu da
se pozovu i kada ni jedan objekat klase nije kreiran u programu.
Statika metoda moe pristupati samo statikim lanovima klase.
Poziv statike metode:
<ime_klase>::<ime_static_metode>(<stvarni_argumenti>)
Zadatak.
Na programskom jeziku C++, kreirati klasu Radnik iji su lanovi:
privatni atributi: ime, prezime i koeficijent strune spreme radnika;
javni statiki atributi: broj radnika preduzea, cena rada za tekui
mesec u preduzeu, visina naknade za prevoz po radniku;
javne metode za: uitavanje vrednosti privatnih atributa sa
standardnog ulaza, za tampanje imena prezimena i plate radnika
na standardni izlaz (pri emu se plata rauna kao proizvod
koeficijenta strune spreme i cene rada);
javna statika metoda za izraunavanje ukupno potrebnih sredstava
za isplatu naknade za prevoz radnika ukoliko se svima isplauje ista
svota.
U funkciji main, uitati broj radnika, visinu cene rada, visinu naknade
za prevoz i podatke o svim radnicima sa standardnog ulaza i na
standardni izlaz prikazati platni spisak radnika i veliinu sredstava
potrebnih da se isplati naknada za prevoz svim radnicima.

You might also like