OOP usmeni Flashcards
Faze u razvoju C++ programa po redosledu,
Editovanje- Program je kreiran u editoru i zapamcen na disku
Preprocesiranje- Preprocesor program procesira programski kod
Compajliranje- Compajler kreira object kod i smesta ga na disk
Linkovanje- Linker linkuje object Code fajlove sa bibliotekama i kreira a.out fajl i smesta ga na disk
Ucitavanje- Loader ucitava program u memoriju
Izvrsavanje- CPU uzima instrukciju po instrukciju i izvrsava ih i pamti medjurezultate
Specifikatori prava pristupa clanovima klase
public: Pristup omogucen svuda gde objekat klase ima scope
private: Pristup omogucen samo u funkcijama clanicama
protected: Pristup omogucen u funkcijama clanicama klase, kao i u izvedenim klasama
Kome su dostupne privatne funkcije?
Privatnim funkcijama mogu da pristupe funkcije clanice te klase i prijatelji te klase.
Kog tipa moze biti povratna vrednost konstruktora?
Konstruktori nemaju povratni tip cak ni void.
Da li je moguce preklopiti (overload) konstruktor/destruktor?
Konstruktor je moguce preklopiti. Moze se definisati vise konstruktora za jednu klasu ukoliko se razlikuju po broju parametra ili tipu parametra. Destruktor nije moguce preklopiti jer klasa moze imati samo jedan destruktor.
Koji je max broj argumenata destruktora izvedene klase?
0 jer destruktori nemaju argumente.
Kada se ne poziva destruktor nekog kreiranog objekta?
GLOBALNI OBJEKTI :
destruktor se ne poziva ako se program zavrsava sa abort
AUTOMATSKI LOKALNI OBJEKTI:
destruktor se ne poziva ako se program zavrsava sa exit ili abort
STATICKI LOKALNI OBJEKTI :
destruktor se ne poziva ako se program zavrsava sa abort
Koja je namena :: operatora?
Binarni rezolucioni operato:
- vezuje ime funkcije sa imenom klase
- jedinstveno identifikuje konkretne klase
- razlicite klase mogu imati funkcije clanice sa istim imenima
Inline funkcije.
Inline funkcije ispred funkcije sadrze kljucnu rec inline. Dobro za funkcije koje se cesto koriste (na primer prosledjuju argumente drugim funkcijama), a cije je telo kratko. Inline funkcije stede vreme izvrsavanja programa na taj nacin sto prevodilac njihov kod umece u kod u svakoj tacki poziva. Na taj nacin se umanjuje broj poziva funkcija. Takodje kompajler moze da ignorise inline.
pr:
inline double cube (const double s)
{ return sss ;}
Kako kompajler poziva inline funkcije?
Tako sto kopira njihov kod na svakom mestu poziva umesto da generise poziv funkcije.
Poziv konstruktora i destruktora statickih lokalnih i globalnih objekata.
Konstruktore i destruktore implicitno poziva kompajler.
Redosled poziva konstruktora i destruktora:
• Globalni objekti
o konstruktori - pre bilo koje druge funkcije (uključujući i main)
o destruktori - kada se main završi (ili je pozvana funkcija exit)
o destruktor se ne poziva ako se program završava sa abort
• Automatski lokalni objekti
o konstruktori - kada se objekti definišu (svaki put kada u toku izvršenja dobiju scope)
o destruktori - kada objekti prestaju da važe, tj. kada izgube scope (kada se završi blok
u kome je objekat definisan)
o destruktor se ne poziva ako se program završava sa exit ili abort
• Statički lokalni objekti
o konstruktori - tačno jedanput kada se dođe do mesta gde je objekat definisan
o destruktori - kada se main završi ili kada se pozove funkcija exit
o destruktor se ne poziva se ako se program završava sa abort
Kada se poziva konstruktor kopije?
- prilikom inicijalizacije objekata (pomocu operatora = ili sa zagradama)
- prilikom prenosa argumenata u funkciju (kreira se lokalni automatski objekat)
- prilikom vracanja vrednosti iz funkcije (kreira se privremeni objekat)
Koji tipovi podataka mogu da predstavljaju povratni tip konstruktora za kopiranje?
Konstruktor ne moze imati privatni tip,cak ni void.
Koliko argumenata moze imati konstruktor kopije i sta vazi za njih?
Konstruktor kopije moze imati argument tipa XX& ili najcesce const XX&. Ostali eventualni argumenti copy konstruktora moraju imati podrazumevane vrednosti.
Sta mora da ima drugi argument konstruktora kopije?
Mora da ima podrazumevanu vrednost.
Navesti osobine relacije prijateljstva.
- prijateljstvo se ne nasledjuje
- nije tranzitivna trelacija
- nije simetricna relacija
U kom delu klase se definišu šablonske/prijateljske funkcije?
Šablonske funkcije se definišu u .h (header) datotekama i uključuju tamo gde se koriste. Mana je to
što korisnik vidi celu implementaciju, a ne samo interfejs.
Prijateljske funkcije mogu da budu članice drugih klasa ili globalne funkcije. Nevažno je da li se
deklaracija navodi u privatnom ili javnom delu.
Kako se definiše pokazivač this na objekat klase kojoj je prijatelj
Nikako, ne može se definisati.
Koliko maksimalno parametara može imati globalna prijateljska funkcija?
Može imati maksimalno dva parametra od kojih je bar jedan argument tipa korisničke klase. Unarni
operator ima samo jedan operand; binarni ima dva.
Kako se kreiraju imena operatorskih funkcija?
• Operatorske funkcije nose ime operator@, gde je @ neki operator ugrađen u jezik.
Ograničenja u preklapanju operatora?
• Postoje neka ograničenja u preklapanju operatora:
o ne mogu da se preklope operatori ., .*, ::, ?: i sizeof, dok svi ostali mogu;
o ne mogu da se redefinišu značenja operatora za primitivne (standardne) tipove
podataka;
o ne mogu da se uvode novi simboli za operatore;
o ne mogu da se menjaju osobine operatora koje su ugrađene u jezik: n-arnost, prioritet i
asocijativnost.
Kako treba realizovati funkciju Ocena operator+ (int rok, Ispit a)?
Treba je realizovati kao globalnu operatorsku prijateljsku funkciju klase Ispit.
Šta treba da vrate operatori koji menjaju levi operand?
• Operatori koji menjaju levi operand (npr. =) treba da vrate referencu na levi operand.
Primer
X& operator = (X& x)
Povratna vrednost operatorskih funkcija preinkrement i predekrement.
• Preinkrement i predekrement vraćaju reference na operand
Navesti operatore za pristup članovima klase?
Članovima klase se pristupa pomoću dva operatora:
• Operator tačka (.)
-objekat
-referencu objekta
• Operator dereferenciranja -> - ovim operatorom se pristupa
pointerima.
. Koji proces je suprotan procesu specijalizacije (ili generalizacije)?
Generalizacija je suprotan postupak od specijalizacije.
Specijalizacija je suprotan postupak od generalizacije.
Kako se definiše izvedena klasa?
Izvedena klasa se definiše navođenjem sledeće konstrukcije između identifikatora klase i znaka { :
private \: -> virtual -> protected -> osnovna klasa ---> public
Nacrtati i objasniti sintaksni dijagram za definisanje izvedene klase.
tabela
Koji je podrazumevani način izvođenja klase?
Podrazumevani tip nasleđivanja je private.
Šta nasleđuje izvedena klasa?
Nasleđuje osobine osnovne klase. Sadrži sve članove podatke i članove funkcije iz osnovne klase
Šta ne nasleđuje izvedena klasa?
Izvedena klasa ne nasleđuje privatne atribute, funkciju članicu operator=, konstruktore ni
destruktore osnovne klase.
Nacrtati tabelu prava pristupa elementima izvedene klase u zavisnosti od načina izvođenja.
tabela
Navesti redosled poziva konstruktora pri kreiranju objekta izvedene klase
inicijalizuje se podobjekat osnovne klase, pozivom konstruktora osnovne klase
• konstruktori članova klase, po redosledu deklarisanja
• izvršava se telo konstruktora izvedene klase
Kako je potrebno definisati izvođenje da bi izvedena klasa posedovala samo jedan podobjekat
indirektne osnovne klase?
Potrebno je definisati ga kao virtual.
Koji objekti se mogu dodeliti objektu osnovne klase?
Objektu osnovne klase se mogu dodeliti objekat osnovne klase i objekat izvedene klase. Primer Osnovna b; Izvedena d; b=d;
Šta je polimorfizam?
Polimorfizam omogućava da klasa saopšti da ima isti interfejs kao i osnovna klasa, ali da je
ponašanje izvedene klase različito od ponašanja osnovne klase. Omogućava da izvedene klase imaju
svoje ‘’verzije’’ funkcija deklarisanih u osnovnoj klasi. Postiže se deklarisanjem željenih funkcija osnovne
klase virtualnim.
Kako se definišu virtuelne funkcije kao statičke članice klase?
Virtuelne funkcije ne mogu biti statičke članice svojih klasa, ali mogu biti prijatelji drugih klasa.
Kako se definiše virtuelna statička funkcija za vraćanje vrednosti celobrojnog atributa neke klase?
Virtuelne funkcije ne mogu biti statičke članice svojih klasa
Kada se aktivira virtuelni mehanizam?
Virtuelni mehanizam se aktivira samo ako se objektu pristupa preko reference ili pokazivača.
Šta je čista virtuelna funkcija?
• Virtuelna funkcija koja nije definisana za osnovnu klasu naziva se čistom virtuelnom funkcijom.
• Deklaracija čiste virtuelne funkcije u osnovnoj klasi sadrži umesto tela =0
Primer
virtual void cvf () = 0; // čista virtuelna funkcija
virtual void vf (); // obična virtuelna funkcija
Šta je apstraktna klasa?
Apstraktna klasa je klasa koja sadrži barem jednu čistu virtuelnu funkciju. Ona ne može imati
instance (objekte), već se iz nje mogu samo izvoditi druge klase.
Mogu da se formiraju pokazivači i reference na apstraktnu klasu, ali oni mogu da ukazuju samo na
objekte izvedenih konkretnih klasa. Ukoliko se i u izvedenoj klasi ne navede definicija neke čiste
virtuelne funkcije iz osnovne klase, onda je i izvedena klasa takođe apstraktna.
Pomoću kojih operatora se može pristupiti objektima apstraktnih klasa?
• Apstraktna klasa ne može imati instance (objekte), već se iz nje samo mogu izvoditi druge klase.
• Pokazivači i reference na apstraktnu klasu mogu da ukazuju samo na objekte izvedenih
konkretnih klasa.
Na koliko načina može da se definiše virtuelni konstruktor?
Ni na jedan način. Konstruktor ne može biti virtuelna funkcija (jer se poziva pre nego što se
objekat kreira).
. Navesti redosled poziva konstruktora pri kreiranju objekta kod višestrukog nasleđivanja.
Konstruktori osnovnih klasa se pozivaju pre konstruktora članova izvedene klase i konstruktora
izvedene klase.
• Konstruktori osnovnih klasa se pozivaju po redosledu deklarisanja.
Sintaksni dijagram za definisanje šablona.
tabela
Načini za generisanje funkcija iz šablonskih funkcija.
Funkcije na osnovu zadatog šablona se generišu:
1. automatski - kad se naiđe na poziv generičke funkcije sa stvarnim argumentima koji mogu da se
uklope u šablon bez konverzije tipova argumenata.
2. na zahtev programera - navođenjem deklaracije (prototipa) za datu generičku funkciju sa željenim
argumentima.
U kojim situacijama se generiše funkcija iz šablona?
Kada naiđe na poziv funkcije za koju ne postoji definicija, a postoji odgovarajuća generička funkcija,
prevodilac generiše odgovarajuću definiciju funkcije
Šta mogu biti formalni argumenti šablonske klase?
Formalni argumenti šablona klase mogu biti: tipovi (class T) ili prosti objekti (koji će biti konkretizovani konstantnim izrazima).
Kojom naredbom se kreira izuzetak
Izuzetak se kreira naredbom throw izraz, gde izraz svojim tipom određuje koji hendler će biti
aktivan. Vrednost izraza se prenosi hendleru kao argument.
Nacrtati i objasniti sintaksni dijagram za obradu izuzetaka.
tabela
Iz kojih funkcija se mogu izazvati izuzeci?
• Izuzetak se može izazvati iz bloka ili iz bilo koje funkcije direktno ili indirektno pozvane iz bloka
naredbe try.
• Funkcije iz kojih se izaziva izuzetak mogu biti i članice klasa, operatorske funkcije, konstruktori i
destruktori.
Kako se navodi spisak tipova izuzetaka koje funkcija izaziva?
Navođenje spiska tipova izuzetaka se postiže pomoću
throw (niz_identifikatora) iza liste argumenata
Koja je namena funkcije set_terminate?
To je handler funkcija koja se automatski poziva kada se proces handlovanja izuzetaka mora
obustaviti iz nekog razloga. Ovo se dešava kada ne postoji catch handler za bačeni izuzetak.
Koja je namena klasa fstream i strstream?
• fstream, za rad sa datotekama
o ifstream - ulaz
o ofstream - izlaz
o fstream – ulaz i izlaz
• strstream, za rad sa nizovima (eng. strings, tj. tokovima u operativnoj memoriji)
o istrstream - za uzimanje podataka iz tokova
o ostrstream - za smeštanje podataka u tokove
o strstream - za uzimanje i smeštanja podataka u/iz tokova
Od čega zavisi koliko se maksimalno može kreirati standardnih tokova?
Ne mogu se kreirati standardni tokovi jer ti koji postoje, postoje kao globalni statički objekti, i ne
može nijedan više da se kreira.
Koliko maksimalno cin/cout objekata je moguće kreirati u main() funkciji?
Nijedan.
Navesti redosled poziva destruktora pri uništavanju objekta izvedene klase.
Pri uništavanju objekta, redosled poziva destruktora je uvek suprotan redosledu poziva konstruktora. Dakle: • destruktor izvedene klase • destruktor članova klase • destruktor osnovne klase
Kako je potrebno definisati izvođenje da bi izvedena klasa posedovala samo jedan podobjekat
indirektne osnovne klase?
Potrebno je definisati ga kao virtual.
Koliko objekata standardnih tokova je moguće kreirati u main()?
Objekti standardnih tokova ne mogu da se kreiraju jer su globalni statički objekti; kreiraju se
prilikom pokretanja svake C++ aplikacije.
Koliko globalnih statičkih objekata(standardnih tokova) možemo da kreiramo?
Ima ih 4, ne možemo.
Na koji način se mogu slati poruke objektima?
Funkcije članice se aktiviraju kao odgovori na poruke. Pomoću njih se komunicira s objektima.
Koje je značenje vrednosti ios::trunc parametra dosmode?
tabela
Koliko maksimalno blanko znaka može da sadrži ulazni podatak ako se za ulaz koristi operator»_space;?
Operator»_space; pamti ulazne podatke samo do prvog unetog blanko znaka.
Koje je dejstvo operacije seekg?
Tokovi datoteka pamte pokazivač na poziciju u fajlu koja ce biti pročitana sledeća.
Vrednost tog pokazivača se može odrediti pomoću operacije seekg:
ifstream is(“plata.dat”, ios::binary|ios::nocreate);
is.seekg(8); //8 bajtova da se procita
Šta je namespace? Navesti primer.
Namespace je okruženje izrađeno da sadrži logično grupisanje jedinstvenih indentifikatora.Std je jedan primer namespace-a.
Kako se pristupa elementima kontejnerskih klasa definisanih u std?
Da bismo ih uključili i direktno koristili u programu, treba iskoristiti direktivu using namespace std.
Bez nje bismo morali da navodimo punu putanju do deklarisanog imena npr. std::cout«_space;umesto
cout
Koliko maksimalno neimenovanih namespace može biti definisano u jednom fajlu?
Jedan.
Kakva je priroda generičkog mehanizma?
Statička jer se instance šablona prave tekstualnom zamenom u toku prevođenja.
Šta predstavljaju instance klase iterator?
Instance klase iterator predstavljaju pozicije elemenata u različitim kontejnerskim klasama.
Koje osobine operatora ne mogu da se menjaju?
One koje su ugradjene u jezik:
- n-arnost
- prioritet
- asocijativnost
Na koliko nacina je moguce kreirati ulazni tok vezan za neku datoteku?
Moguce je napraviti na tri nacina:
- Koriscenjem konstruktora bez argumenata
- Konstruktorom sa argumentima, tj navodjenjem naziva datoteke I odgovarajucih parametara
- Navodjenjem deskriptora datoteke.
Koji header file je potrebno ukljuciti da bi mogli da koristimo f-ju find nad objektom kontejnerske klase list?
include
Parametrizovani tipovi.
Genericke klase predstavljaju parametrizovane tipove. Tipovi podataka koji su parametri sablona menjaju se konkretnim tipovima podataka.
Koliko ce biti “usteda” u broju poziva inline rekurzivne f-je FIB(int n) kojom se racuna n-ti element Fibonacijevog niza ako je n=7? (Fibonacijev niz: 1,1,2,3,5,8,13,21,…)
Nece biti ustede jer kompajler ignorise inline kada se radi o rekurzivnoj funkciji, jer ne zna koliko bi puta trebalo da iskopira kod funkcije.
Kada se nece izvrsiti destructor jedne klase?
Destruktor osnovne klase se uvek izvrsava. Ili kao jedini ili posle destruktora izvedene klase. Njega ne treba pozivati, implicitno se poziva. Destruktor nece biti pozvan onda kada se program zavrsava sa abort.
Ako konstruktor kopije ime 3 argumenata kakav je treci argument?
Ukoliko konstruktor kopije ima vise od jednog argumenta koji je tipa XX& ili najcesce const XX&, onda ti ostali argumenti moraju imati podrazumevane vrednosti.
Kako treba organizovati kolekciju objekata da bi se iskoristio polimorfizam?
Da bi se poštovala semantika i iskoristio polimorfizam, kolekcije objekata treba
realizovati kao kolekcije pokazivača na objekte a ne kao kolekcije objekata.
Objasniti virtuelno izvodjenje.
• Osnovna klasa može biti virtuelna – treba je deklarisati kao virtuelnu sa virtual
• Ako je osnovna klasa virtuelna onda se podobjekti osnovne klase unutar objekta
Izvedene klase dele sa svim podobjektima koji imaju istu osnovnu klasu kao virtuelnu
• Obraćanje članu osnovne klase nije dvosmisleno ako postoji samo jedan primerak
tog člana bez obzira na način pristupa
• Ako je potrebno da izvedena klasa poseduje samo jedan podobjekat indirektne
osnovne klase onda osnovnu klasu treba deklarisati kao virtuelnu !!!
Opisati delovanje funkcije write u radu sa izlaznim tokovima.
Funkcija write se koristi za upis bloka memorije u
izlazni tok. Ona ima dva argumenta: prvi, char
pokazivač i drugi, broj bajtova za upis. Treba
napomenuti da je obavezna konverzija u char* pre
adrese strukture ili objekta. Funkcija write se koristi i za
binarne datoteke.