You are on page 1of 8

Razlika izmedju prijateljskih funkcija i funkcija clanica:

kada želimo napisati funkciju za našu klasu, koja vraæa kao rezultat

neki podatak odre?enog tipa, a taj podatak je jedna od osobina svakog

ili gotovo svakog zasebnog objekta (tj. instance te naše klase)

onda je najbolje koristiti metodu, tj. funkciju clanicu. Ona se

poziva uvijek nad nekim objektom, i vraæa tu neku njegovu osobinu (naravno,

ima pristup svim njegovim atributima).

Medutim, ako nam treba funkcija koja vraæa neki podatak koji nije toliko direktno

povezan sa osobinama pojedinaènih objekata. NPR: zelimo napisati funkciju koja

daje kao rezultat zbir vektora, onda je prirodnije koristiti obiènu funkciju, tj.

funkciju koja nije funkcija èlanica, nego prijateljska funkcija, ili u najgorem sluèaju

statièka funkcija èlanica. U oba slucaja, funkcija se ne poziva nad odre?enim

objektom, nego prima parametre, i vraæa nešto - kao i klasièna funkcija.

Jedina razlika izmedu friend i static funkcije je naèin poziva:

za obiènu friend funkciju je jednostavno, ali za static pišemo:

Vektor::ZbirVektora(a,b);

Pod kojim uvjetima se može napraviti niz ciji su elementi primjerci neke klase?
Nizove èiji su elementi primjerci neke klase moguæe je bez problema deklarirati

jedino ukoliko ta klasa uopæe nema konstruktore (što je vrlo loša praksa), ili

ukoliko ima konstruktor bez parametara.

Koristi se ako objekti nisu glomazni, - ne zauzimaju previše memorije.

Može i ako nema konstruktor bez parametara, ali ovako:

Datum niz datuma[5] = {Datum(31, 12, 2004), Datum(8, 4, 2003),

Datum(14, 7, 1998), Datum(4, 11, 2000), Datum(6, 2, 2005)};

A ne možemo koristiti ni new, tako da je najbolje koristiti nizove pokazivaèa.


U kojim slucajevima se koristi konstruktor kopije a u kojim preklopljeni operator dodjele?
konstruktor kopije:

(1) kod inicijalizacije,

(2) imamo klasu proba, i u njoj konstruktor:

proba &operator =(const proba &a);

neka je c objekat klase proba, i pokušajmo mu dodjeliti 50

za c=50; preklopljeni operator dodjele oèekuje drugi objekat klase proba kao parametar, ali

mi mu šaljemo int 50. Sada se nad parametrom a poziva konstruktor (ako postoji), koji

napravi bezimeni objekat za koji vezuje referencu a. To je Konverzija...

(3) kod prenosa po vrijednosti

operator dodjele se koristi kada god je objekat lijevo od operatora dodjele osim kod inicijalizacije.

Tri razloga zbog kojih se umjesto nizova ciji su elementi primjerci neke klase radije
koriste nizovi ciji su elementi pokazivaci na primjerke neke klase.
1. zato što je lakše, brže i efikasnije izvršiti sortiranje pokazivaša, nego sortiranje glomaznih
objekata.

2. zato što je moguæe koristiti new.

3. zato što je moguæe praviti i velike nizove pomoæu petlji i new, èak iako imamo

neki drugi konstruktor, a npr: nemamo konstruktor bez parametara. U suprotnom bismo trebali
raditi nabrajanje

elemenata u vitièastim zagradama.

4. zato što je moguæe formirati heterogene nizove, pomoæu pokazivaèa na bazne klase.

Koji se atributi moraju a koji ne mogu inicijalizirati u konstruktorskim inicijalizacionim


listama
Moraju npr: datumi, i bilo koji drugi atributi koji nisu bazni tipovi podataka, nego klase koje

nemaju kontruktor bez parametara, jer takav konstruktor za njih nema smisla, tj.

svi atributi koji zahtijevaju propisnu inicijalizaciju.

konstantni atributi se isto moraju inicijalizirati iskljuèivo

putem konstruktorskih inicijalizacionih listi.

moraju reference na neke objekte, jer referenca za razliku od pokazivaèa mora odmah

biti vezana za nešto.


atributi static const TIP naziv_varijable, ne mogu unutar inicijalizacijske liste, nego vani,

ali ako su int ili char, može i odmah (u tom sluèaju mora se koristiti =, a ne zagrade).

atributi static TIP naziv_varijable, ne mogu unutar inicijalizacijske liste, nego vani,

**************************************************************************

Pitanja:

moze li neko ko zna odgovore na ova pitanja koja se moraju znati za usmeni da ih postavi na grupu
:D

1. razliku izmedu prijateljskih funkcija i funkcija clanica,

2.pod kojim uvjetima se može napraviti niz ciji su elementi primjerci neke klase,

3. u kojim slucajevima se koristi konstruktor kopije a u kojim preklopljeni operator dodjele,

4. koji se atributi moraju a koji ne mogu inicijalizirati u konstruktorskim inicijalizacionim listama i,

5.nabrojati barem tri razloga zbog kojih se umjesto nizova ciji su elementi primjerci neke klase radije

koriste nizovi ciji su elementi pokazivaci na primjerke neke klase

dijela ispita

/////////////////////////////////////

1. Funkcije clanice su dio klasa i pozivaju se uvijek nad objektom. Dakle, prvi argument je implicitan i
moze se uzeti preko pokazivaca this. Prijateljske funkcije su eksterne funkcije, dakle nisu dio klase, ali
imaju prava pristupa privatnim atributima ukoliko objekte primaju kao argumente. Friend funkcije se
koriste kao obicne funkcije.

2. Samo ukoliko postoji konstruktor bez parametara (makar ga vi rucno napisali ili vam compiler
generirao).

3. Konstruktor kopije se uvijek poziva na inicijalizaciji objekta (dakle, nad objektom koji ranije nije
inicijaliziran), dok se preklopljeni operator dodjele koristi iskljucivo nad vec inicijaliziram objektima.

Npr. pitfall na koji moras paziti tada je ovo:

vector<int> v1(10, 20);

vector<int> v2 = v1; //Poziva se konstruktor kopije bez obzira sto se sintaksno koristi operator
dodjele, jer v2 nije ranije inicijaliziran

Ostale situacije su ja mislim ocigledne.


4. Svi konstantni atributi se moraju inicijalizirati koristeci KIL. Isto vrijedi i za atribute baznih klasa (u
slucaju nasljedjivanja moras u KIL pozvati njihove konstruktore).

Ne mogu se sjetiti sta se sve ne moze inicijalizirati tu. Vjerovatno nista sto koristi neke druge funkcije
za inicijalizaciju (npr. strcpy), ali nisam siguran stvarno. Provjeri to.

5. Peti dio:

1. Manje je zauzece memorije - Ti tek alociras prostor za objekat kada bude potreban.

2. Operacija zamjene (swap) nad kolekcijom je skoro besplatna i bez obzira na velicinu objekta uvijek
isto kosta (zamijenjujes 2 varijable koje imaju velicinu 4 ili 8 byte-a), pa je sortirano jako brzo.

3. To je jedini moguci pristup kada objekti iz kolekcije ne podrzavaju konstruktor bez argumenta -
ono isto sto je vezano za trece pitanje, dakle nije moguce tada uopste napraviti taj niz).

1.Razlika izmedju friend i clanica:


Razlika zato sto za friend funkciju nije potrebna klasa

ona se definira kao i obicna funkcija s time da ako je

prijateljska funkcija sa klasom ima pravo pristupa

privatnim atributima te klase.

Bitna razlika pri implementaciji jeste da friend funkcija

iz razloga sto se poziva normalno nema "pojma" nad cime

je pozvana nego joj to moramo ko parametar poslati.

Dok funkcija clanica uzima sama sebe kao parametar

(*this) i iz tog razloga funkcija clanica prima parametar

manje od friend funkcije.

2. Pod kojim uvjetom se moze napraviti niz primjeraka klase.


Pod uvjetom da postoji konstruktor bez parametara i pod

uvjetom kad pravimo niz odma dodjeljujemo vrijednosti sa

parametrima

Klasa niz[5]={Klasa(parametri),Klasa(parametri)....itd}

//Ako kaze ne moze ti reci da moze


3.Kad se koristi konstruktor kopije kad operator dodjele
Konstruktor kopije se samo koristi pri incijalizaciji varijable

Operator dodjele se koristi kad vec postoji varijabla da

joj se dodjele vrijednosti neke druge postojece.

S time da se operator dodjele moze koristiti i pri

incijalizaciji s time

Klasa b=nesto...;

Klasa a(b);

Pri cemu se kreira klasa a kao "random vrijednost" pa se

u nju upise klasa b;

4.Sto je bolje koristiti niz ppokazivaca na klase nego niz klasa

-Zbog brzine rada lakse je prebacivati pokazivace sa

jednog mjesta na drugo da pokazuju nego kopirati sve elemente klase

-Lakse je naci 25 stanova razbacanih u gradu nego 25

stanova koji su jedni iznad drugog(tj u istoj zgradi i da

budu svi na prodaju)

-Zbog rezervisanja prostora za ono sto vam je potrebno i

koliko

-Zbog Modulacije sa varijablama da se ne radi nikakvo

kopiranje pomjeranje elemenata nego samo pokazivacima

premjestanje(obratit paznju na curenje memorije)

-Prednosti Binarne nad Textualnom datotekom

Formatirana datoteka za ucitavanje

Security na visem nivou

-Mane binarne datoteke

Binarne datoteke mogu da ne rade kako treba u zavisnosti

od kompajlera i od sistema (64bit 32bit)

od vrste procesora dal radi sa (Bendian ili Lendian)


Razlika izmedju referenci i pokazivaca
referencu mozetevezati za jedan objekat tokom njenog zivota jedini nacin

da je pomjerite jeste ponovna deklaracija "redeklaracija"

dok pokazivace mozete prespajati.

Referenca se veze na postojeci objekat a ne na prostor

Zasto Sluze Datoteke


Datoteke sluze za "SPAŠAVANJE" podataka, radi kasnijegkoristenja.

Razlika izmedju prefiksnog i postfiksnog ++

Prefiksni ++P

Prefiksni ++P radi prvo nesto nad objektom P(najcesce

nesto uveca) pa onda radi nesto sa tim objektom

Iz ovoga sto prefiksni radi nesto nad objektom pa radi

nesto sa njim to nam govori da on kao funkcija (operator)

mora da vraca referentno objekat nad kojim je pozvan.

Kada vraca referentno na postojeci objekat moze se opet

"nadovezati" jos nekih carlama kao npr

++ ++P sa time da se izvrsi ovaj ++P koji vrati

referentno objekat pa se nakon izvravanja izraz ++++P

pretvori u ++P(novo P promjenjeno)

Postfiksni(Sufiksni) ++

P++

Radi nesto slicn ali dosta razlicito, prvo uradi nesto sa


P pa onda uveca, to je neki mahinalni opis

ali u biti on radi nesto sa "vrijednoscu" koju je imalo P

prije povecanja iako se P uvecalo.

zato se kod P++ koristi ona "pomocna" varijabla gdje ce

se cuvati vrijednost prije povecanja P-a

i zbog ove pomocne i zbog onog "radi nesto sa

vrijednoscu" ovaj operator(funkcija) vraca rezultat

normalno a ne referentno, pomocna varijabla je

napravljena u tjelu funkcije, ako je tu napravljane tu ce

i umrijeti....ako vratimo referencu na tu pomocnu koje se

unisti na sta je onda referenca ????

Virtual
Virtual je nesto kao cigo ako imate nesto sto je

nedefinisano kao pravi objekat ali znate da je to "smece"

onda zovete cigu da vam kaze kakvo je to smece i moze li

se prodati.

Znaci virtual ima mogucnost ako imate pokazivac na neku

Baznu Klasu da sazna koja od navedenih klasa je to

zapravo...
Sta je polimorfizam
POlimorfizam je izmislio Bosnjo

Polimorfizam sto se tice smeca nije zastupljen u evropi

toliko oni imaju kontejnere za staklo za papir za ovo za

ono...a bosnjo ima kontejner za sve..bosnju boli briga

sta je to on samo zna da je smece i kaze trpaj u

kontejner :P (ccesto i oko kontejnera)

TJ polimorfizam je osobina da se u neki niz neku (kutiju)

stave razni primjerci klasa koji su nasljedjeni iz jedneb bazne klase...s time da se pri svakom uzimanju
nekog primjerka iz kutije smatra da je on prvobitno tip bazne klase...pa se tek ustanovi koji je zaista
tip(zovete cigu .vritual)

You might also like