You are on page 1of 24

Objektno orijentisano

programiranje
Funkcije

Kako C++ prosleuje argumente


Prenos po vrednosti (pass-by-value)
Vrednost argumenta kopira se u parametar funkcije
O Promene parametra nemaju nikakvog efekta na
argument koji se koristi za poziv funkcije
o Poziv po vrednosti je default nain prenosa parametara
o

Prenos po adresi (pass-by-reference)


U parametar se kopira adresa, a ne vrednost,
argumenta
o Promene parametra menjaju i argument
o Postie se tako to je pokaziva argument funkcije
O

Objektno orijentisano programiranje

Prenos parametara po adresi

Objektno orijentisano programiranje

Reference
Umesto runog poziva po adresi pozivanjem funkcije
sa argumentima pokazivaima, moe se C++
kompajleru rei da automatski koristi prenos po adresi
To se postie tako to se kao argument funkcije
navode reference
Unutar funkcije, operacije sa parametrom se
automatski dereferenciraju, to znai da se ne radi
sa adresom promenljive nego sa njenom vrednou

Objektno orijentisano programiranje

Reference
Referenca se deklarie tako to se ispred njenog
imena navodi &

Objektno orijentisano programiranje

Reference
Referenca se koristi kao alijas (drugo ime) za
promenljivu, tj. moe se koristiti kao alternativni
nain za pristup promenljivoj
Prilikom deklaracije, nezavisna referenca se uvek
inicijalizuje i tokom celog svog ivotnog veka je
vezana za objekat kojim je inicijalizovana
Reference se ne mogu preusmeravati na druge
promenljive kao pokazivai
Retko se reference koriste samostalno; njihova
najvanija upotreba je kao argumenti funkcija
Objektno orijentisano programiranje

Reference kao argumenti funkcija


Prosleivanje reference postie se navoenjem
operatora & ispred imena promenljive

Nije potrebno u funkciji koristiti operator


dereferenciranja (*) kao to je sluaj sa
pokazivaima
Operacije koje se izvode nad parametrom koji je
referenca utiu na samu vrednost parametra,
a ne na njegovu adresu

Objektno orijentisano programiranje

Reference

Objektno orijentisano programiranje

Reference
Funkcija iji je argument referenca poziva se na isti
nain kao da se radi o prenosu po vrednosti
Parametar se inicijalizuje adresom argumenta, bez
ikakvog kopiranja vrednosti
Referenca kao argument funkcije pravi se pri
svakom pozivu funkcije, i unitava po zavretku
izvravanja funkcije

Objektno orijentisano programiranje

Pravila u radu sa referencama


Ne moe se definisati referenca promenljive
koja je sama referenca (tj. ne postoje reference na
reference)
Ne postoje nizovi referenci
Ne postoje pokazivai na reference

Objektno orijentisano programiranje

10

Pokazivai i reference
Pokaziva se moe preusmeriti tako da pokazuje na
neki drugi objekat (promenljivu), a referenca ne
moe
Pokaziva moe da ne pokazuje ni na ta, a
referenca od poetka do kraja svog ivotnog veka
pokazuje na jedan isti objekat
Pristup objektu preko pokazivaa obavlja se pomou
operatora *, dok je preko reference pristup
neposredan

Objektno orijentisano programiranje

11

Referenca kao povratni tip funkcije


Kada je povratni tip funkcije referenca, ona vraa
implicitni pokaziva na povratnu vrednost
To znai da se funkcija u tom sluaju moe koristiti i
sa leve strane operatora dodele (lvalue)
Kada je povratni tip referenca, treba voditi rauna o
ivotnom veku promenljive povezane sa referencom

Objektno orijentisano programiranje

12

Referenca kao povratni tip funkcije

Objektno orijentisano programiranje

13

Referenca kao povratni tip funkcije


Pokaziva na lokalnu promenljivu, kao ni referenca
na lokalnu promenljivu u funkciji nikada ne smeju da
budu povratna vrednost funkcije
Poto referenca nikada ne postoji samostalno,
ve je uvek alijas neke druge promenljive,
objekat s kojim je povezana mora da postoji
i nakon zavretka izvravanja funkcije

Objektno orijentisano programiranje

14

Korienje modifikatora const u funkciji


Kada se modifikator const navede ispred imena
parametra funkcije, to znai da odgovarajui
argument nikako ne sme biti promenjen
Kompajler proverava da li se argument unutar
funkcije menja i upozorava na to
Korienjem referenci moe se izbei nepotrebno
kopiranje argumenata prilikom poziva funkcije, a ako
se one koriste uz modifikator const, obezbedjuje se
dodatna zatita od sluajne izmene argumenta

Objektno orijentisano programiranje

15

Korienje modifikatora const u funkcijama

Objektno orijentisano programiranje

16

Statike promenljive u funkcijama


Umesto korienja globalnih promenljivih u
funkcijama kada je potrebna promenljiva koja pamti
vrednosti izmeu razliitih poziva iste funkcije bolje
je koristiti statike promenljive
Deklaracija statike promenljive postie se
dodavanjem modifikatora static ispred tipa
promenljive
Statika promenljiva inicijalizuje se samo jednom,
pri prvom izvravanju funkcije, pamti svoje vrednosti
tokom celog izvravanja programa, a dostupna je u
bloku u kome je deklarisana
Objektno orijentisano programiranje

17

Modifikator static

Objektno orijentisano programiranje

18

Preklapanje funkcija
U jeziku C++ mogu da postoje dve (ili vie funkcija
istog imena, sa razliitim brojem i(li) tipovima
argumenata; to se zove preklapanje
(preoptereivanje) funkcija (function overloading)
Da bi dve funkcije bile preklopljene, nije dovoljno da
im se razlikuje samo povratni tip, ve i tip i(li) broj
argumenata moraju biti razliiti
Kada se poziva preklopljena funkcija, kompajler na
osnovu tipa argumenata poziva odgovarajuu
funkciju
Objektno orijentisano programiranje

19

Preklapanje funkcija

Objektno orijentisano programiranje

20

Preklapanje funkcija
Preklopljene funkcije predstavljaju zajedniki
interfejs za funkciju koja radi isto, ali sa razliitim
tipovima podataka
Ista imena treba koristiti samo za funkcije koje rade
isto
Prilikom preklapanja funkcija mogue je napraviti
funkcije ije se telo donekle razlikuje zato to je
funkcija prilagoena tipu parametara koje prihvata

Objektno orijentisano programiranje

21

Podrazumevane vrednosti argumenata


Parametru funkcije moe da se dodeli
podrazumevana (default) vrednost koja e se
koristiti kada u pozivu funkcije nije naveden
odgovarajui argument za taj parametar
Default vrednosti mogu biti navedene samo jednom,
i to prilikom prve deklaracije funkcije
Svi parametri koji prihvataju default vrednosti moraju
biti zadati sa desne strane parametara koji nemaju
default vrednosti

Objektno orijentisano programiranje

22

Podrazumevane vrednosti argumenata

Objektno orijentisano programiranje

23

Podrazumevane vrednosti argumenata


Default vrednosti argumenata koriste se za
pojednostavljivanje poziva sloenih funkcija ili kao
preica za preklopljene funkcije
Prilikom zadavanja default vrednosti argumenata
u kodu funkcije treba voditi rauna da kada se
argument ne navede, ne bude nikakvih posledica

Objektno orijentisano programiranje

24

You might also like