Sunteți pe pagina 1din 29

1. Koja je razlika između statičke varijable i pokazivača?

Statička varijabla - fiksan memorijski prostor koji se ne mijenja u toku


izvođenja programa.Pokazivač je varijabla koja sadr�i adresu druge
varijable ili objekta. Pokazivač se mo�e koristiti za pristup nekoj
varijabli dok se statička varijabla ne mo�e koristiti u tu svrhu.

2. Koja je razlika između pokazivačke varijable i dinamičke


varijable?

Pokazivačka varijabla � pok (sadr�i adresu druge varijable u


memoriji)
Dinamička varijabla - *pok (sadr�i vrijednost varijable u memoriji, to je
dereferencirana pokazivačka varijabla).

3. �to je to operator dereferenciranja i za �to se koristi?

Opretor dereferenciranja u C++ je znak *. On kao svoj operand uzima


pokazivač na neku vijednost (varijable ili objekta) te vraća tu vrijednost.
Osim toga, koristi se i za deklarciju pokazivača na neki tip.

4. �to je to adresni operator i za �to se koristi?

Adresni oparator u C++ je znak &. To je unarni operator (ima jedan


argument) koji vraća pokazivač na svoj operand (adresu u memoriji).
Koristi se za deklariranje referenci ili dohvaćanje memorijskih adresa
varijabli, objekta, funkcija itd...

5. Koja je razlika između statičke i dinamičke alokacije


memorije?

Dinamička alokacija memorije događa se prilikom izvođenja programa,


dok se statička alokacija odvija prilikom prevođenja programa. Operatori
new i delete su zadu�eni za alokaciju/dealokaciju memorijskog
prostora u C++.

6. �to je NULL pokazivač?

NULL pokazivač ima posebnu vrijednost koja je u većini slučajeva


jednaka nuli, no to nije pravilo. Ta posebna vrijednost označava da taj
pokazivač ne pokazuje ni na jedan objekt u memoriji. Najče�će se
koristi kako bi označio kraj vezane liste, ili ga fukncija vraća kao rezultat
kada je do�lo do neke gre�ke prilikom izvođenja itd...

7. �to su to reference i gdje se koriste?

Referenca je drugo ime za neki memorijski prostor, a omogućava


jednom memorijskom prostoru da bude kori�ten preko dva
identifikatora. Reference povećavaju fleksibilnost prilikom prebacivanja
podataka iz jednog dijela u drugi. Najče�će se koriste kod poziva
funkcije. Najmoćniji i najjednostavniji oblik reference je pokazivač.

8. �to je to vezana lista i za�to predstavlja dinamičku strukturu


podataka?

Vezana lista je jedna od osnovnih struktura podataka u programiranju.


Čine ju elementi liste koji mogu sadr�avati bilo koje tipove podataka i
uz to jedan ili dva pokazivača (reference) na sljedeći i prethodni
element. Vezane liste sadr�e pokazivače na podatke istog tipa (svoje
elemente) pa ih nazivamo samo-referencirajućima. One dozvoljavaju
umetanje ili uklanjanje bilo kojeg elementa u listi ali ne i slučajni pristup.
U C++ se implementiraju pomoću struktura (ili klasa) i pokazivača. One
su dinamičke strukture podataka jer im veličina nije unaprijed definirana.

9. Čemu slu�i glava vezane liste?

Glava je prvi element u listi, a ima pomoćnu ulogu - pristup vezanoj listi.
Pokazivač na listu sadr�i upravo adresu glave liste. U pravilu se ne
koristi za pohranu podataka.

10. Za�to se za čitanje vezane liste tipično koristi iteracija tipa


while?

Pogodna kontrolna struktura za čitanje liste je iteracija tipa while jer


� nije poznat broj elemenata liste (nema zadanu dimenziju, kao polje)
� nula kao vrijednost logičkog izraza omogućuje izlazak iz petlje (NULL
pokazivač )
� usporedba s poljem: za čitanje polja pogodna je iteracija tipa for jer je
broj elemenata polja poznat (zadan je kao dimenzija polja)

11. Koje su glavne razlike između vezane liste i polja?

Vezana lista:
� nema poznat broj elemenata liste
� kod upisa podataka potrebno je najprije dinamički alocirati element
liste i
upisati mu podatkovni sadr�aj
� svaki element vezane liste mora se odvojeno dealocirati pomoću
operatora delete
� elementi vezane liste mogu sadr�avati podatke različitog tipa
Polje:
� broj elemenata je poznat (zadan kao dimenzija polja)
� podaci u elementima moraju biti istog tipa
� kod upisa podataka element polja već je alociran i pristupa mu se uz
pomoć indeksa
� statičko polje dealocira se pri zavr�etku programa
� dinamičko polje dealocira se pomoću operatora delete [ ]

12. Objasnite upotrebu operatora '->' i '.' (točka) u radu s vezanom


listom.

Za statičke strukture (i klase) i pristup njihovim članovima koristimo


operator �.�. Za dinamičke strukture i pristup njihovim članovima
koristi se operator �->�. Dinamičke su strukture dostupne preko
pokazivača.

13. Objasnite korake dodavanja novog elementa na kraj vezane


liste.

Koraci dodavanja novog elementa na kraj liste:


� pronaći zadnji element u listi (onaj s NULL pokazivačem)
� alocirati novi element (osigurava se potreban memorijski prostor za
novi element)
� povezati zadnji element u listi s novim (elementu s NULL
pokazivačem dodajemo pridru�ujemo pokazivač na novi element)
� upisati NULL vrijednost pokazivaca slijedeci u novi element liste (kraj
liste)
� upisati podatkovni sadr�aj u novi element liste

14. Objasnite postupak pretra�ivanja vezane liste prema zadanom


obilje�ju (ključu).

Lista se pretra�uje uporabom iteracije tipa while u kojoj se krećemo po


svakom elementu liste uporabom jednog pokazivača i pritom
provjeravamo da li podatkovni sadr�aj odgovara zadanom uvijetu
pretra�ivanja. Ukoliko je to slučaj, tra�eni element je pronađen i
iteracija se prekida.

15. Objasnite korake brisanja elementa vezane liste.

Koraci brisanja elementa liste:


� pronaći element u listi za brisanje (prema zadanom ključu) i njegov
prethodnik
� povezati prethodni element liste s onim iza elementa za brisanje (=
premostiti element koji se bri�e)
� dealocirati element liste koji se bri�e
16. Objasnite postupak sortiranja vezane liste metodom Bubble
sort.

Postupak:
� prolazi se ponavljaju dok ima zamjena (indikator=1)
� unutar prolaza koristi se pokazivač tekuci za kretanje kroz listu
� pokazivač slijedeci sadr�i adresu slijedećeg elementa u listi (tekuci
-> slijedeci), a prethodni adresu prethodnog elementa
� usporede se matični brojevi u tekućem i slijedećem elementu
- ako ima potrebe za �zamjenom mjesta�:
� u tri koraka preusmjere se pokazivači
� indikator = 1 (indikator zamjene)

17. Objasnite postupak dealokacije vezane liste.

Za dealokaciju vezane liste potrebno je dealocirati svaki njezin element.


Za to se koristi iteracija tipa while kako bi se kretali po listi. Prilikom
kretanja po listi, dealociramo svaki element, a nakon izlaska, i glavu
liste.

3. Čemu slu�i tip podatka?

- Tip podataka određuje veličinu i strukturu memorijskog prostora za


smje�taj varijable, te skup operacija koje se nad varijablom mogu
izvr�iti

4. Koja je razlika između statičkog i dinamičkog polja?

� Statičko polje
� naziv polja predstavlja implicitni (nije alociran u radnoj memoriji)
pokazivač na polje
� adresa svakog elementa polja izračunava se na temelju vrijednosti
indeksa i bazne adrese (sadr�i je implicitni pokazivać
� Dinamičko polje
� u radnoj memoriji alociran je eksplicitni pokazivač na polje
� adresa svakog elementa polja izračunava se na temelju vrijednosti
indeksa i adrese polja (= kao i kod statičkog polja)

5. Koja je razlika između eksplicitnog i implicitnog pokazivača?

- Implicitni pokazivač nije alociran pokazivač na polje (u radnoj memoriji)


dok je,
eksplicitni pokazivač je pokazivač na polje.

6. Objasnite vezu između polja i pokazivača?

- Pokazivači omogućuju implementaciju polja (ali i drugih memorijskih


struktura podataka, npr. vezanih listi, binarnih stabala, �),
- Polje je određeno svojim pokazivačem (implicitnim ili eksplicitnim), te
brojem i tipom elemenata
Naziv polja predstavlja tzv. implicitni pokazivač na polje.

7. �to su to strukture?

Strukture su slo�eni tipovi podataka koji uključuju vi�e elemenata


- različitog naziva i
- različitog tipa

8. Čemu slu�i funkcija memcpy?


� kopira memorijske blokove
� koristi se za kopiranje podataka slo�enih tipova (takvih za koje nije
definiran operator pridru�ivanja �=�).

9. �to je to potprogram?

- Potprogram je izdvojena logička cijelina unutar programa.

10. Objasnite razliku između formalnih i stvarnih argumenata


funkcije.

- Formalne argumente (navode se u zaglavlju funkcije).


- Stvarne argumente (navode se kod poziva funkcije).

11. Čemu slu�i referenca u listi argumenata funkcije?

Referenca u listi argumenata funkcije:


-takav argument ne alocira se na stogu nego dijeli memorijski prostor sa
stvarnim argumentom.
-stvarni argumenti po povratku iz funkcije poprime vrijednosti
odgovarajućih formalnih argumenata
NOTE: u biti je referenca funkcije drugi za neki memorijski prostor (npr.
U main programu je to varijabla a, u funkciji je to varijabla prvi)

12. Kakve su to statičke lokalne varijable?


� označavaju se pomoću ključne riječi static.
� statička lokalna varijabla ima doseg lokalne, a trajanje globalne
varijable
� ne alociraju se na stogu
� vrijednost statičke varijable ostaje sačuvana do ponovnog poziva
funkcije
Inicijalizacija statičke varijable vrijedi samo za prvi poziv funkcije!

13. �to je to rekurzija i kako funkcionira?

Rekurzija je svojstvo potprograma da mo�e pozivati sam sebe.


� Rekurzivnim pozivom poziva se ista funkcija (proces), ali ne i isti
skup lokalnih podataka jer se za svaki poziv funkcije ti podaci alociraju
na stogu.
� Po povratku iz rekurzivne funkcije restauriraju se sa stoga
odgovarajući lokalni podaci.

14. �to je to preopterećenje funkcije?

� predstavlja kori�tenje istog imena za različite implementacije


funkcije
� funkcije istog naziva moraju se međusobno razlikovati po potpisu
(=broju i tipu argumenata)

15. �to je to pokazivač na funkciju?

Osim �to funkcija mo�e primati određene argumente i vraćati neki


rezultat, ona u izvedbenom kodu programa zauzima i neki određemi
memorijski prostor. Kada pozivamo neku funkciju mi zapravo
prebacujemo izvođenje programa na memorijsku lokaciju na kojoj je
smje�tena funkcija. To se prebacivanje odvija preko pokazivača na tu
funkciju. To pak znači da je ime svake funkcije pokazivač na lokaciju
gdje počinje njezin kod.

16. �to su to biblioteke i čemu slu�e?

Biblioteke su dijelovi programa koji se uključuju u matičnu programsku


datoteku ili se iz nje pozivaju:
� mogu se upotrijebiti unutar vi�e programa,odnosno
� predstavljaju resurse programa
Moguće je uključivati programski kod ili (pomoću datoteka
zaglavlja(header; .h)) objektni kod (preveden; tako nije dostupan
programski kod osim sučelja)
1. Deklarirajte element dvostruko vezane liste studenata i alocirajte
glavu liste.
struct telement{
int broj;
telement *slijedeci;
telement *prethodni;
};//struct
Alokacija glave liste:
telement *lista = new telement;
lista -> slijedeci = NULL;
lista -> prethodni = NULL;

2. Koji su koraci dodavanja novog elementa na kraj dvostruko


vezane liste?

Tra�enje zadnjeg elementa u listi. Alokacija novog elementa u listi.


Povezivanje novog elementa s prethodnim. Pridavanje nul vrijednosti
pokazivaču sljedeči u novom elementu liste čime se označava kraj liste.
Povezivanje zadnjeg elementa s novim. Upisivanje podatkovnog
sadr�aja.

3. Koji su koraci dodavanja novog elementa na početak dvostruko


vezane liste?
Potrebni su pokazivači novi i sljedeči. Sljedeči se inicializira na prvi
element liste (odmah poslje glave). Deklarira se novi element. Pove�e
se novi element sa glavom liste i elementom na koji pokazuje pokazivač
sljedeči (tj. Naprave se veze iz novog elementa prema glavi i
sljedečem). Zatim se pove�e glava i sljedeči element s novim (tj.
Naprave se veze iz glave i sljedećeg prema novom). Na kraju se upi�e
podatkovni sadr�aj.

4. Napi�ite funkciju za ispis svih elemenata dvostruko vezane


liste od početka.
void ispis_od_pocetka(telement *lista){
telement *tekuci = lista->slijedeci;
while (tekuci){
cout << tekuci -> broj << ", ";
tekuci = tekuci -> slijedeci;
};//while
cout << "NULL" << endl;};

5. Napi�ite funkciju za ispis svih elemenata dvostruko vezane


liste od kraja.
void ispis_od_kraja(telement *lista){
telement *tekuci = lista->slijedeci;
while (tekuci->slijedeci)
tekuci = tekuci -> slijedeci; // tra�enje zadnjeg elementa u listi
while (tekuci!=lista){
cout << tekuci -> broj << ", ";
tekuci = tekuci -> prethodni;
};//while
cout << "glava" << endl;};

6. Napi�ite funkciju i poziv funkcije za dealokaciju dvostruko


vezane liste.
tstudent *dealokacija_liste(tstudent *lista){
tstudent *tekuci,*prethodni;
prethodni=lista;
tekuci=lista->slijedeci;
while (tekuci){
delete prethodni;
prethodni=tekuci;
tekuci=tekuci->slijedeci;
}//while
delete prethodni;
return NULL;};
Poziv: lista=dealokacija_liste(lista);

7. Objasnite postupak dodavanja novog čvora u binarno stablo.


Trebamo 2 pokazivača: zadni i novi. Zadnji se inicializira na korijen
stabla. Uspoređuje se broj koji �elimo smjestiti u stablo sa brojem u
čvoru na koji pokazuje pokazivač zadnji. Ako je novi broj veči, pokazivač
zadnji se usmjerava na desni čvor, a ako je manji ili jednak onda na
lijevi. Usporedba i pomicanje zadnjeg se nastavlja tako dugo dok smjer
u kojem se �elimo kretati vi�e nema podčvora već nul vrijednost
(pokazivač lijevo ili desno vi�e ne pokazuje na neki podčvor već ima
nul vrijednost). Tada se alocira novi čvor. Pove�e se zadnji čvor s
novim. Inicializiraju se pokazivači lijevo i desno u novom čvoru na nul
vrijednost, te se postavi uvjet za izlaz iz petlje na nulu (do-while petlja: u
njoj se vr�e sve radnje vezane uz dodavanje novog čvora), čime se
označava da je novi čvor dodan.

8. Deklarirajte čvor binarnog stabla i alocirajte korijen stabla.


struct telement{
int broj; //podatkovni sadr�aj
telement *lijevo,*desno; //pokazivači na podređene čvorove
};
Alokacija korijena stabla (pomoćni element):
telement *stablo = new telement;
stablo->lijevo=NULL;
stablo->desno=NULL;

9. Objasnite ispis čvorova binarnog stabla u uzlaznom redoslijedu.

Obavlja se u rekurzivnoj funkciji. Pri prvom pozivu funkcije, pomoču


ključne riječi static, deklarira se pokazivač korijen koji se usmjeri na
korijen stabla i vi�e se ne mo�e preusmjeriti. Pri svakom pozivu
funkcije se obavlja provjera dali pokazivač �stablo�, kojim se krečemo
po stablu nema mo�da nul vrijednost jer ako ima znači da je do�ao do
kraja stabla u tom smjeru pa se vrača iz te rekurzivne funkcije. Pri
svakom prvom rekurzivnom pozivu funkcije, �stablo� se kreće ulijevo.
Pri svakom povratku iz lijeve rekurzivne funkcije, funkcija koja je
pozvala tu lijevu funkciju ispisuje broj koji se nalazi u trenutnom čvoru
(osim ako je trenutni čvor korijen stabla), te poziva funkciju 2. put, a pri
svakom 2. rekurzivnom pozivu �stablo� se kreće udesno. Pri povratku
iz desne rekurzivne funkcije, funkcija koja je pozvala tu desnu je
zavr�ila s radom pa se iz nje opet vraća za jedan korak natrag. Na taj
način se ispi�u svi brojevi u uzlaznom redosljedu.

10. Objasnite ispis čvorova binarnog stabla u silaznom redoslijedu.


Obavlja se u rekurzivnoj funkciji. Pri prvom pozivu funkcije, pomoču
ključne riječi static, deklarira se pokazivač korijen koji se usmjeri na
korijen stabla i vi�e se ne mo�e preusmjeriti. Pri svakom pozivu
funkcije se obavlja provjera dali pokazivač �stablo�, kojim se krečemo
po stablu nema mo�da nul vrijednost jer ako ima znači da je do�ao do
kraja stabla u tom smjeru pa se vrača iz te rekurzivne funkcije. Pri
svakom prvom rekurzivnom pozivu funkcije, �stablo� se kreće
udesno. Pri svakom povratku iz desne rekurzivne funkcije, funkcija koja
je pozvala tu desnu funkciju ispisuje broj koji se nalazi u trenutnom
čvoru (osim ako je trenutni čvor korijen stabla), te poziva funkciju 2. put,
a pri svakom 2. rekurzivnom pozivu �stablo� se kreće ulijevo. Pri
povratku iz lijeve rekurzivne funkcije, funkcija koja je pozvala tu lijevu je
zavr�ila s radom pa se iz nje opet vraća za jedan korak natrag. Na taj
način se ispi�u svi brojevi u silaznom redosljedu.

11. Objasnite postupak pretra�ivanja binarnog stabla.

Pomoću pokazivača �tekuci� se krečemo po stablu u while petlji. Pri


svakom izvođenju petlje provjerava se dali �tekuci� pokazuje na čvor
s brojem koji tra�imo, ako ne, provjerava se dali je tra�eni broj veći ili
manji od tekučeg, ako je veči �tekuci� se kreče udesno, ako je manji
ili jednak, �tekuci� se kreče ulijevo. Kad je broj pronađen prekida se
petlja i funkcija vrača pokazivač na čvor u kojem je nađen broj. Ako broj
nije pronađen u stablu funkcija vrača null pokazivač. Ako je kojim
slučajem broj pronađen u korijenu stabla, svejedno se nastavlja kretati
po stablu i tra�iti taj broj opet. Izvan funkcije se provjerava �to je
funkcija vratila. Ako je to nul vrijednost ispisuje se da broj nije nađen, a
ako nije, ispisuje se adresa čvora.

12. Objasnite postupak dealokacije binarnog stabla.

Obavlja se u rekurzivnoj funkciji. Kreče se od korjena stabla(pokazivač


stablo pokazuje na korijen stabla). Ako postoji čvor lijevo, ponovo se
poziva funkcija ali ovaj put s početkom u lijevom čvoru(�stablo�
pokazuje na lijevi čvor). Ako nema lijevo čvorova ili se dogodio povratak
iz lijeve rekurzivne funkcije, provjerava se dali ima desno čvorova. Ako
ima ponovo se poziva funkcija, ali ovaj put s početkom u desnom čvoru.
Ako nema ni desno čvorova ili se dogodio povrat iz desne rekurzivne
funkcije trenutni čvor se dealocira s delete te se izađe iz trenutne
funkcije.
1. Koje su razlike u sortiranju datoteke i polja metodom Bubble
sort?

Razlika je u tome kod polja sortiramo vrijednost, a kod datoteke čitav


slog zapisa prema nekom kriteriju npr. matičnom broju. Kod Bubble sort-
a zamjena se vr�i zamjenom susjednih mjesta pa je kod velikih
datoteka takvo sortiranje jako sporo. Kod polja moramo imati varijablu u
kojoj privremeno smje�tamo podatak prilikom zamjene, a kod datoteke
imamo dvije liste koje podatke čitaju u strukturu i na taj način mo�emo
zamijeniti sadr�aj direktno.

2. Objasnite postupak zamjene mjesta dvaju susjednih zapisa u


datoteci.

Pročitamo prva dva zapisa slog1 i slog2, te ako je potrebno vr�imo


zamjenu i to na vrlo jednostavan način tako da prvo zapi�emo slog2,
pa zatim slog1 s čim je zamjena izvr�ena.

3. Objasnite postupak sortiranja Quicksort.

Quicksort radi rekurzivno, tako da dijeli niz na manje cjeline "particije".


Prvo odredimo lijevu i desnu poziciju, te vrijednost gdje postavljamo
sidro. Sortiranje se vr�i u tri koraka:
prvi korak - gledajući s lijeve strane tra�imo vrijednost veću od sidra,
drugi korak - vrijednost spremamo u privremeno pomoćnu varijablu,
treći korak - tra�imo s desne strane vrijednost manju od sidra i zatim
vr�imo zamjenu.
Prvo se sortira lijevi dio od početnog sidra.

4. Koje su razlike u sortiranju datoteke i polja metodom Quicksort?

Razlika je u tome kod datoteke sortiramo cjelokupni zapis, a kod polja


njegovu vrijednost. Kako kod čitanja datoteke mo�emo istovremeno
čitati dva zapisa zamjena se mo�e izvr�iti bez potrebe za pomoćnom
strukturom koja je nu�na kod sortiranja polja. Kod Quicksort-a zamjena
se vr�i samo kad je to potrebno, tako da je vrijeme sortiranja kraće od
Bubble sort-a.

5. Za�to se postupak Quicksort naziva jo� i particijskom


metodom sortiranja?

Zbog toga �to se niz koji se sortira dijeli na manje cjeline "particije" te
se one sortiraju s obzirom na sidro, zbog toga je ovaj sort iznimno brz.

1. Koje su osnovne razlike između klase i strukture iz jezika C?

Struktura predstavlja jednostavno slo�eni tip poznat jo� iz C jezika. To


je samo nakupina podataka umotanih u zajedničku ovojnicu. Dakle,
deklaracija struct definira isključivo atribute (podatkovni članovi).
Deklaracija class uobičajena je u jeziku C++, a definira atribute
(podatkovne) i metode (funkcijske članove) � potpune objekte za
razliku od struktura koje sadr�e samo podatke. Klasa definira objekt te
označava da novi tip po�tuje koncepte objektnog programiranja. To
znači da klasa osim podatkovnih, definira i funkcijske članove koji
opisuju operacije na objektu.
U osnovi, klasa u C++ je samo pro�irena struktura iz C jezika.
Jo� neke razlike su: klasa sadr�i specifikatore pristupa temo�e
sadr�avati i neke specijalne funkcijske članove (kao �to su
konstruktor � inicijalizira objekt i destruktor � dealocira objekt).

2. Objasnite specifikatore pristupa.

Deklaracija class uvodi specifikatore pristupa. Oni određuju pravo


pristupa pojedinim podatkovnim i funkcijskim članovima klasa. U tu
svrhu koriste se sljedeće ključne riječi: public (javni
pristup), private (privatni pristup) i protected (za�tićeni pristup).

Javni pristup (public) � članovima se mo�e pristupiti izvan klase.


Moguć je isključivo za specifikator public.

Privatni pristup (private) � pristup članovima iz metoda klase gdje su


definirani. Određuje da odgovarajućim članovima mogu pristupiti
isključivo funkcijski članovi iste klase. Za sve ostale dijelove programa
(s izuzetkom klase prijatelja) ti članovi su nedostupni. Moguć je za sva
tri specifikatora pristupa.

Za�tićeni pristup (protected) - znači pravo pristupa članovima klase


iz metoda klase gdje su definirani i iz metoda podređenih klasa (klasa
koje nasljeđuju odgovarajuće članove), ali su ti članovi nedostupni iz
svih ostalih dijelova programa.

3. Koja je razlika između unutarnjeg i vanjskog pristupa članovima


klase?

Unutarnji pristup znači pristup iz metoda klase gdje su definirani


(moguć za sva tri specifikatora pristupa)
Vanjski pristup znači pristup izvan klase (moguć isključivo za
specifikator public).

4. �to se postiglo time �to metode pripadaju objektima samo


logički, a ne i fizički?

Atributi pripadaju objektima iz svojih klasa fizički, a metode samo


logički. Time se dobilo da svaki objekt iz zadane klase sadr�i svoje
vlastite podatke, ali svi objekti iz iste klase koriste iste metode.

5. �to je to javno sučelje klase?

Javno sučelje klase čine svi njeni članovi s javnim pristupom (public).
Preko javnog sučelja objekti komuniciraju s okolinom (ostalim dijelovima
programa).

6. �to je to implementacija klase?


Implementaciju klase osim njenog javnog sučelja čine i članovi koji
nisu vidljivi izvana (imaju privatni, odnosno za�tićeni pristup).
Predstavlja način na koji se reprezentacija objekta ostvaruje i vrijedi
princip skrivanja podataka (nisu svi članovi klase dostupni izvana).

7. Objasnite princip enkapsulacije.

Enkapsulacija predstavlja objedinjavanje javnog sučelja i


implementacije (odnosno svih članova klase) u cjelinu. Prema principu
enkapsulacije metode su logički pridru�ene podatkovnom sadr�aju
objekata.

8. �to je to pokazivač this i čemu slu�i?

Pomoću pokazivača this moguće je unutar klase doznati adresu


objekta, odnosno: *this predstavlja sam taj objekt na način kako je
dostupan iz koda klase.

9. Čemu slu�i operator pripadnosti :: ?

Operator :: naziva se operator dodjele područja ili operator pripadnosti.


Pripadnost se odnosi na klasu ili područje imena (namespace). Mo�e
se koristiti za:

� definiciju metoda izvan tijela klase


� pristup drugim područjima imena (namespace)
� pristup statičkim članovima klasa
� pristup članovima pobrojenja deklariranim unutar klasa
� pristup globalnim varijablama u području dosega lokalnih

10. �to se dobilo kori�tenjem klase za mjerenje vremena u


odnosu na strukturno rje�enje?
Moguće je mjeriti vrijeme za neograničeni broj procesa jer je moguće
definirati neograničen broj objekata. Svaki objekt neovisno vodi podatke
o vremenu početka i kraja. Podaci u objektima ostaju sačuvani do:
namjerne promjene vrijednosti ili dealokacije objekta.

11. Objasnite strukturnu dekompoziciju programa.

Strukturna dekompozicija programa dijeli proces obrade podataka na


vi�e logičkih cjelina, potprograma, koje jo� nazivamo slobodnim
potprogramima (pripadaju globalnom području). Osnovna svrha
potprograma je da za zadane argumente izračuna povratnu vrijednost.
Cijeli podatkovni kontekst potprograma je privremen:
- Lokalni podaci (uključujući argumente) alociraju se na stogu i traju
samo do povratka iz potprograma
- Statički lokalni podaci su izuzetak, ali se ne mogu multiplicirati!
- Jedini način da lokalni podaci budu multiplicirani i sačuvani za kasniju
upotrebu je pomoću rekurzije
Osnovni princip je da se podaci pridru�uju procesu, odnosno,
podatkovni kontekst potprograma mora se proslijediti potprogramu kod
poziva. Princip skrivanja podataka (odvajanja sučelja od
implementacije) implementiran je pomoću koncepta globalnih i lokalnih
podataka.

12. Objasnite objektnu dekompoziciju programa.

Objektna dekompozicija programa dijeli podatke, kojima se logički


pridru�uju potprogrami koji rade s tim podacima. Takva integracija
podataka (atributa) i potprograma za obradu (metoda) definirana je
odgovarajućom klasom (princip enkapsulacije). Objekti iz zadane klase
mogu se neograničeno multiplicirati i pridru�ivati stvarnim objektima.
Podatkovni kontekst objekata (=svi njegovi atributi) ostaje sačuvan do
dealokacije objekta, odnosno: nema potrebe pri svakom pristupanju
objektu prenositi mu cijeli podatkovni kontekst.
Osnovni princip je da se procesi pridru�uju podacima, odnosno,
podatkovni kontekst objekta postoji od alokacije objekta i samo mu se
po potrebi mijenjaju pojedini dijelovi. Princip skrivanja podataka
(odvajanja sučelja od implementacije) implementiran je pomoću
specifikatora pristupa public, protected i private.

1. �to je to konstruktor?

Konstruktor je metoda koja ima isti naziv kao i klasa, a poziva se


automatski kod alokacije objekta. Specifičnosti konstruktora u odnosu
na ostale metode:
� konstruktor nema definiran tip (ne vraća vrijednost),
� konstruktor se ne nasljeđuje,
� mo�e postojati vi�e konstruktora za istu klasu (odnosno, mo�e se
preopteretiti),
� konstruktor ne mo�e biti statički član

2. �to je to destruktor?

Destruktor također ima naziv isti kao i klasa, samo �to ispred naziva
klase dolazi znak ~ (tilda). Poziva se automatski kod dealokacije
objekta. Specifičnosti destruktora u odnosu na ostale metode:
� destruktor nema argumente,
� destruktor (kao i konstruktor) nema tip, ne vraća vrijednost i ne
nasljeđuje se.

3. Napi�ite klasu koja sadr�i konstruktor i primjer pokretanja.

#include <iostream.h>
class ckonstruktor {
public:
ckonstruktor() {
cout <<"Konstruktor"<<endl;
}
};
void main() {
ckonstruktor *objekt;
objekt = new ckonstruktor;
delete objekt;
}
4. Napi�ite klasu koja sadr�i destruktor i primjer pokretanja.

#include <iostream.h>
class cdestruktor {
public:
cdestruktor() {
cout <<�Konstruktor�<<endl;
}
~cdestruktor() {
cout <<"Destruktor"<<endl;
}
};
void main() {
cdestruktor *objekt;
objekt = new cdestruktor;
delete objekt;
}

5. Napi�ite metodu za dodavanje novog elementa vezane liste


studenata.

void dodaj_element(){ // dodaje element na kraj liste


cstudent *novi,*zadnji;
zadnji = this; // this je glava liste
while (zadnji->slijedeci)
zadnji = zadnji->slijedeci; // pronala�enje zadnjeg elementa
novi = new cstudent; // alokacija novog elementa
liste
zadnji -> slijedeci = novi; // povezivanje zadnjeg s novim
cout << "Maticni broj: "; cin >> novi -> mat_br;
cout << "Prezime i ime: "; cin >> novi -> prez_ime;
cout << "Godina studija: "; cin >> novi -> god_stu;
};//dodaj_element

Poziv metode:
lista -> dodaj_element();
6. Napi�ite metodu za brisanje elementa vezane liste predmeta
prema �ifri predmeta.

void brisi_element(int sifra_predmeta){


int nadjen=0;
cstudent *brisi = this -> slijedeci, *prethodni = this;
while (brisi){
if (brisi -> sifra_predmeta == sifra_predmeta){
nadjen=1;
prethodni -> slijedeci = brisi -> slijedeci;
delete brisi;
break;
};
prethodni = brisi;
brisi = brisi->slijedeci;
};
if (nadjen) cout << "Predmet je izbrisan iz liste!" << endl;
else cout << "Predmet nije pronadjen!" << endl;
};

Poziv metode:
lista->brisi_element(sifra_predmeta);

7. Napi�ite metodu za pretra�ivanje vezane liste robe prema


�ifri robe.

void pretrazi_listu(int sifra_robe){


int nadjen=0;
cstudent *tekuci = this -> slijedeci;
while (tekuci){
if (tekuci -> sifra_robe == sifra_robe){
nadjen=1;
cout << ":Sifra robe " << tekuci ->
sifra_robe << endl;
cout << ": Naziv robe " << tekuci ->
naziv_robe << endl;
break;
};
tekuci = tekuci -> slijedeci;};
if (!nadjen) cout<<"Roba nije pronadjena u
listi!"<<endl;
}; };

Poziv metode:
lista->pretrazi_listu(sifra_robe);
8. Napi�ite metodu za dealokaciju vezane liste robe.

croba *dealokacija_liste(){
croba *tekuci,*prethodni;
prethodni=this;
tekuci=this->slijedeci;
while (tekuci){
delete prethodni;
prethodni=tekuci;
tekuci=tekuci->slijedeci;
}
delete prethodni;
return NULL;
};

Poziv metode:
croba *roba = new croba;
roba=roba->dealokacija_liste();

9. �to je to prijatelj klase?

Prijatelj klase predstavlja izuzetak od pravila da privatnim članovima


klase mogu pristupati isključivo metode iste klase.
Pojedina klasa mo�e dodijeliti nekoj funkciji, metodi neke klase ili
čitavoj klasi pravo pristupa vlastitim privatnim i za�tićenim članovima.
Takve funkcije, metode i klase nazivaju se prijatelji klase, a označavamo
ih pomoću ključne riječi friend.
�Prijateljstvo� klasa nije obostrano!

10. Napi�ite primjer gdje klasa ormara privatno nasljeđuje klasu


namje�taja.

#include <iostream.h>
class cnamjestaj {
public: int godina_proizvodnje;
char materijal [50];
};
class cormar : private cnamjestaj{
public: int sirina;
int visina;
int dubina;
cormar() {
cout <<"Godina proizvodnje: "; cin >>godina_proizvodnje;
cout <<"Materijal: "; cin.ignore();
cin.getline(materijal,50);
cout <<"Sirina: "; cin >> sirina;
cout <<"Visina: "; cin >> visina;
cout <<"Dubina: "; cin >> dubina;
cout <<"Ormar: "<<godina_proizvodnje<<" "<<materijal;
cout <<sirina<<"x"<<visina<<"x"<<dubina<<endl;
}
};
void main() {
cormar *ormar = new cormar;
delete ormar;
}

11. Napi�ite primjer gdje klasa zvijezda za�tićeno nasljeđuje


klasu galaksija.

#include <iostream.h>
class cgalaksija {
public: char ime_galaksije [50];
};
class czvijezda : protected cgalaksija{
public: int broj_zvijezda;
char najveca_zvijezda[50];
void unos() {
cout <<"Ime galaksije: ";cin.getline(ime_galaksije,50);
cout <<"Broj zvijezda: "; cin >> broj_zvijezda;
cout <<"Najveca zvijezda: ";
cin.ignore();cin.getline(najveca_zvijezda,50);
cout <<"Galaksija: "<<ime_galaksije<<endl;
cout <<"Broj zvijezda: "<<broj_zvijezda<<endl;
cout <<"Najveca zvijezda: "<<najveca_zvijezda<<endl;
}
};
void main() {
czvijezda *zvijezda = new czvijezda;
zvijezda->unos();
delete zvijezda;
}
12. Napi�ite primjer gdje klasa mobilnih telefona javno nasljeđuje
klasu telefona.

#include <iostream.h>
class ctelefon {
public: char ime_proizvodjaca [50];
};
class cmobitel : public ctelefon{
public: int broj_modela;
char novi_model[50];
void unos() {
cout <<"Ime proizvodjaca:
";cin.getline(ime_proizvodjaca,50);
cout <<"Broj modela: "; cin >> broj_modela;
cout <<"Novi model: ";
cin.ignore();cin.getline(novi_model,50);
cout <<"Proizvodjac: "<<ime_proizvodjaca<<endl;;
cout <<"Broj modela: "<<broj_modela<<endl;
cout <<"Novi model: "<<ime_proizvodjaca<<"
"<<novi_model<<endl;
}
};
void main() {
cmobitel *mobitel = new cmobitel;
mobitel->unos();
delete mobitel;
}

13. Napi�ite primjer gdje klasa romana privatno nasljeđuje klasu


knjiga.

#include <iostream.h>
class cknjiga {
public: char ime_autora [50];
};
class croman : private cknjiga{
public: int broj_romana;
char najbolji_roman[50];
void unos() {
cout <<"Ime autora: ";cin.getline(ime_autora,50);
cout <<"Broj romana: "; cin >> broj_romana;
cout <<"Najbolji roman: ";
cin.ignore();cin.getline(najbolji_roman,50);
cout <<"Autor: "<<ime_autora<<endl;;
cout <<"Broj romana: "<<broj_romana<<endl;
cout <<"Najbojli roman: "<<najbolji_roman<<endl;
}
};
void main() {
croman *roman = new croman;
roman->unos();
delete roman;
}

14. Objasnite polimorfizam.

Polimorfizam omogućuje jednostavnije rukovanje heterogenim


strukturama podataka
- koristi mehanizam virtualnih metoda i kasnog povezivanja (eng. late
binding)

15. �to je to kasno povezivanje (eng. Late Binding)?

Kasno povezivanje predstavlja određivanje adrese poziva funkcijskog


člana u toku izvođenja programa, umjesto za vrijeme prevođenja.
Stvarna adresa tada se nalazi u tablici virtualnih članova, a funkcijski
članovi koji se tako pozivaju moraju biti označeni ključnom riječi virtual.
Kasno povezivanje dolazi do izra�aja kada vi�e objekata u lancu
nasljeđivanja dijeli isti memorijski prostor. U tom slučaju se virtualni
funkcijski članovi nekog objekta iz klase koja nasljeđuje osnovnu
pozivaju iz te naslijeđene klase, dok se nevirtualni funkcijski članovi
pozivaju iz osnovne klase.

16. �to su to čiste virtualne metode?

Čista virtualna funkcija (metoda) je virtualni funkcijski član iza čije


deklaracije stoji oznaka =0.
To su funkcije koje slu�e samo za definiranje javnog sučelja.
Da bi klasa bila apstraktna mora sadr�avati najmanje jednu čistu
virtualnu funkciju.
17. �to je to apstraktna klasa?

Apstraktna klasa je klasa iz koje se ne mo�e instancirati objekt, nego


slu�i samo kao osnova za nasljeđivanje. Da bi klasa bila apstraktna,
mora sadr�avati barem jednu čistu virtualnu metodu.

1. �to je to asocijacija među klasama i koje asocijacije su


moguće?

Unutar objektnog programa mo�e biti definirano vi�e klasa koje


međusobno surađuju. Asocijacija predstavlja semantičku povezanost
među klasama. Takva povezanost mo�e biti u raznim oblicima
(nasljeđivanje, sadr�avanje (agregacija), kori�tenje, ugnje�đene
klase.

2. �to je to sadr�avanje kao oblik asocijacije među klasama i


koja su moguća sadr�avanja?

Sadr�avanje znači da klasa definira član (objekt) koji je iz druge klase.


Moguća sadr�avanja su po vrijednosti i po referenci. Po vrijednosti
koristimo sintaksu objekt ime_objekta, a kada korisitmo sadr�avanje po
referenci tada korisimo i pokazivač objekt *ime_objekta.

3. Napi�ite primjer sadr�avanja po vrijednosti.

class klasa{
public:
int podatak1;
char podatak2[32];
};
class klasaS{
public:
int podatak_klaseS;
char podatak_klaseS[32]; klasa objekt_klase_klasa;
};
klasaS *Objekt;
4. Napi�ite primjer sadr�avanja po referenci.

class klasa{
public:
int podatak1;
char podatak2[32];
};
class klasaS{
public:
int podatak_klaseS;
char podatak_klaseS[32];
klasa *objekt_klase_klasa;
klasaS(){
objekt_klase_klasa = new klasa;
}
~klasaS(){
delete objekt_klase_klasa;
}
};
klasaS *Objekt;

5. Objasnite kori�tenje kao oblik asocijacije među klasama.

Kori�tenje znači da klasa spoziva metodu definiranu u nekoj drugoj


klasi. Ka�emo da klasa klijenta poziva uslugu, neke druge klase,
odnoso ona �alje poruku toj drugoj klasi davajući joj odgovarajuće
argumente koji su potrebni (to su argumenti te metode).

6. Napi�ite primjer kori�tenja kao oblika asocijacije među


klasama.

class cstudent{
public:
int mat_br;
char prez_ime[35];
void unos(){
cout << "Maticni broj:";cin>>mat_br;
cout << "Prezime i ime:";cin>>prez_ime;
};
void ispis(){
cout << "Maticni broj:"<<mat_br<<endl;
cout << "Prezime i ime:"<<prez_ime<<endl;
};
};
class clista{
public:
clista *slijedeci;
cstudent student; // sadrzavanje po vrijednosti
void unos(){
student.unos();
};
void ispis(){
student.ispis();
};
};
int main(){
clista *lista=new clista;
lista->slijedeci=NULL;
lista->unos();
lista->ispis();
delete lista;
}

7. �to je to ugnije�đena klasa?

Ugnje��ena klasa je klasa definirana unutar neke druge klase. Mo�e


se korisiti samo od klase u koju je ugnije�đena. Takve se klase također
ne mogu nasljeđivati. Adresiranje takve klase je isto kao u slučaju
sadr�avanja.

8. Napi�ite primjer ugnije�đene klase.

class clista{
class cstudent{
public:
int mat_br;
};
public:
clista *slijedeci;
cstudent student;
};
int main(){
clista *lista = new clista;
lista->slijedeci=NULL;
lista->student.mat_br = 35000;
delete lista;
}

9. Kako i u kojim slučajevima objekti mogu međusobno


komunicirati?

Objekti mogu međusobno komunicirati samo ako postoji veza između


njih odnosno ako postoji asocijacija. Postojanje asocijacije označava put
komunikacije među instancama klasa. Objekti međusobno komuniciraju
slanjem poruka. Najče�ći način slanja poruke je pozivanjem neke
metode. Smjer slanja poruke označava se strelicom, a takav se
komunikacijski sustav prijazuje UML dijagramom
komnikacije(Collaboration diagram).

10. �to je to ER model podataka?

To je ENTITY � RELATIONSHIP, predstavlja gravički jezik za prikaz


struktura podataka. Entitet je ne�to �to se mo�e jednoznačno
imenovati, i opisati, a mo�e predstavljati objekt, vezu ili svojstvo.
Objekt se predstavlja pravokutnikom, a mo�e se odnositi na datoteku
(fixed size file), teblicu u BP, ili neku drugu mem. strukturu. Objekti imaju
svoja svojstva (atribute) a to mogu biti polja u tablici BP, datoteci ili nekoj
drugok mem. strukturi. Pri tome treba razlikovati identifikatore i
deskriptore. Identifikator jednoznačno identificira objekt, dok ga
deskriptor opisuje. Veze koje su moguće (kardinalnost veze) �
one2one(1:1), one2meny(1:N), meny2one(N:1), meny2meny(s tim da
N:N moraju biti dekomponirane)).
11. Nacrtajte ER model podataka za posudbe knjiga (objekti su
knjige, posudbe i članovi)

S-ar putea să vă placă și