OOP USMENI Flashcards

1
Q

Faze u razvoju C++ programa (po redosledu).

A

Editovanje - Program je kreiran u editoru i zapamćen na disku
Preprocesiranje - Preprocesor program procesira programski kod
Compajliranje - Compajler kreira object code i smešta ga na disk.
Linkovanje - Linker linkuje object Code fajlove sa bibliotekama i kreira a.out fajl i smešta ga na disk
Učitavanje - Loader učitava program u memoriju
Izvršavanje - CPU uzima instrukciju po instrukciju i izvršava ih i pamti medjurezultate.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Specifikatori prava pristupa članovima klase.

A

public: Pristup omogućen svuda gde objekat klase ima scope
private: Pristup omogućen samo u funkcijama članicama
protected: Pristup omogućen u funkcijama članicama klase, kao i u izvedenim klasama

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Kome su dostupne privatne funkcije?

A

Privatnim funkcijama mogu da pristupe funkcije članice te klase i prijatelji te klase.
Javnim članovima se može pristupiti kroz svaki objekat klase.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Kog tipa može biti povratna vrednost konstruktora?

A

Konstruktori nemaju povratni tip, čak ni void.

Klase imaju specijalnu funkciju članicu koja se zove konstruktor. Konstruktor ima isto ime kao i klasa (T() za klasu T), a služi da se definišu početne vrednosti podataka klase. Konstruktori kreiraju i inicijalizuju objekte. Poziva se u trenutku kreiranja objekta klase. Konstruktor može prihvatiti parametar, prema tabeli, ali ne može imati povratnu vrednost, čak ni void. Takođe, moguće je da postoji više od jednog konstruktora, pri čemu svaki ima različitu listu argumenata.
Za razliku od konstruktora, destruktor nema ni povratni tip, a ni parametre i on služi za brisanje objekata.
Specijalna funkcija klase koja se implicitno poziva u trenutku kada se objekat klase briše iz memorije je destruktor. Destruktor nema tip koji vraća. Destruktor je funkcija bez argumenata i u klasi može da postoji samo jedan destruktor. Identifikator destruktora je isti kao i identifikator klase, sa prefiksom ~ na početku (~T() za klasu T). Ukoliko se ne definiše destruktor, podrazumeva se destruktor sa praznim telom. Destruktori se uglavnom koriste kada objekat treba da dealocira memoriju ili neke sistemske resurse koje je konstruktor alocirao (najčešće kada klasa sadrži članove koji su pokazivači). Posle izršavanja tela destruktora, automatski se oslobađa memorija koju je objekat zauzimao. Da nema destruktora koji oslobađaju memoriju došlo bi do njenog nestanka što dovodi do toga da aplikacija pada (memory leak).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Da li je moguće preklopiti (overload): a) konstruktor b) destruktor?

A

Konstruktor je moguće preklopiti. Destruktor nije moguće preklopiti jer klasa može imati samo jedan destruktor.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Koji je maksimalni broj argumenata destruktora izvedene klase?

A

Nula jer destruktori nemaju argumente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Kada se ne poziva destruktor nekog kreiranog objekta?

A

Globalni objekti
destruktor se ne poziva ako se program završava sa abort
Automatski lokalni objekti
destruktor se ne poziva ako se program završava sa exit ili abort
Statički lokalni objekti
destruktor se ne poziva se ako se program završava sa abort

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Koja je namena operatora :: ?

A

Binarni rezolucioni operator (::) :
-‘’Vezuje’’ ime funkcije sa imenom klase;
-Jedinstveno identifikuje konkretne klase;
-Različite klase mogu imati funkcije članice sa istim imenima;
-Format za definisanje funkcija članica
PovratniTip ImeKlase::ImeFunkcijeČlanice( ){

}
-Ne zavisi da li je funkcija public ili private
-kod funkcija članica definisane unutar klase nije potrebno navoditi operator :: niti ime klase

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Inline funkcije.

A
Inline funkcije ispred funkcije sadrže ključnu reč inline. Dobro za funkcije koje se često koriste (na primer samo prosleđuju argumente drugim funkcijama), a čije je telo kratko. Inline funkcije štede vreme izvršavanja programa na taj način što prevodilac njihov kod umeće u kod u svakoj tački poziva. Na taj način umanjuje broj poziva funkcija. Takođe, kompajler može da ignoriše inline.
Primer
inline double cube( const double s ) { 
	return s * s * s; 
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Kako kompajler poziva inline funkcije?

A

Tako što kopira njihov kod na svakom mestu poziva umesto da se generiše poziv funkcije.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Poziv konstruktora i destruktora statičkih lokalnih (globalnih) objekata.

A

Konstruktore i destruktore implicitno poziva kompajler.Zavisi od redosleda izvrsavanja i generalno, destruktori se pozivaju u suprotnom
redosledu od redosleda poziva konstruktora

Redosled poziva konstruktora i destruktora:
Globalni objekti
konstruktori - pre bilo koje druge funkcije (uključujući i main)
destruktori - kada se main završi (ili je pozvana funkcija exit)
destruktor se ne poziva ako se program završava sa abort
Automatski lokalni objekti
konstruktori - kada se objekti definišu (svaki put kada u toku izvršenja dobiju scope)
destruktori - kada objekti prestaju da važe, tj. kada izgube scope (kada se završi blok u kome je objekat definisan)
destruktor se ne poziva ako se program završava sa exit ili abort
Statički lokalni objekti
konstruktori - tačno jedanput kada se dođe do mesta gde je objekat definisan
destruktori - kada se main završi ili kada se pozove funkcija exit
destruktor se ne poziva se ako se program završava sa abort

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Prednosti korišćenja klasa

A
  • Jednostavnije programiranje
  • Interfejs
  • Ponovno korišćenje softvera
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Razdvajanje interfejsa od implementacije

A

Prednosti:
-Lakse se modifikuju programi

Nedostaci:

  • Header fajlovi
    • Delovi implementacije(inline funkcije)
    • Napomene o ostalim implementacijama(private clanovi)
  • Visi stepen skrivanja koriscenjem proxy klase
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Header fajlovi

A
  • Definicija klasa i prototipova funkcija
  • Uključuju se u svaki fajl koji koristi klasu #include
  • Ekstenzija fajla .h
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Kada se poziva konstruktor kopije?

A

Konstruktor kopije se poziva kada se objekat inicijalizuje objektom iste klase, a to je:

  • Prilikom inicijalizacije objekata (pomoću operatora = ili sa zagradama)
  • Prilikom prenosa argumenata u funkciju (kreira se lokalni automatski objekat)
  • Prilikom vraćanja vrednosti iz funkcije (kreira se privremeni objekat)
  • Kada kompajler generiše privremeni objekat

Kada se objekat x1 klase XX inicijalizuje drugim objektom x2 iste klase, C++ će podrazumevano izvršiti prostu inicijalizaciju redom članova objekta x1 članovima objekta x2. Međutim, to ponekad nije zadovoljavajuće pa, da bi programer imao potpunu kontrolu nad inicijalizacijom objekta drugim objektom iste klase, koristi se copy konstruktor.
Konstruktor kopije klase XX se može pozvati sa samo jednim stvarnim argumentom tipa XX.
Konstruktor kopije najčešće ima argument tipa XX& ili const XX&

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Koji tipovi podataka mogu da predstavljaju povratni tip konstruktora za kopiranje?

A

Konstruktor ne može imati povratni tip, čak ni void.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Koliko argumenata može imati konstruktor kopije i šta važi za njih?

A
Konstruktor kopije ima jedan argument tipa XX& ili najčešće const XX&. Ostali eventualni argumenti copy konstruktora moraju imati podrazumevane vrednosti. 
Primer
X(const X&, int a= 0);
X(const X&, int); // ovo ne bi mogao da bude copy konstruktor
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Šta mora da ima drugi argument konstruktora kopije?

A

Mora da ima podrazumevanu vrednost.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Navesti osobine relacije prijateljstva.

A

Ponekad se u praksi može javiti potreba da neki deo programa (funkcija, klasa itd.) pristupi nekim članovima date klase. Prijateljstvo je relacija koja reguliše pravo pristupa, a ne oblast važenja i vidljivost indentifikatora. Prijateljstvo se NE nasleđuje, NIJE simetrična i NIJE tranzitivna relacija!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

U kom delu klase se definišu šablonske/prijateljske funkcije?

A

Š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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Kako se definiše pokazivač this na objekat klase kojoj je prijatelj?

A

Prijateljska funkcija nema pokazivač this na objekat klase kojoj je prijatelj.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Koliko maksimalno parametara može imati globalna prijateljska funkcija?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Kako se kreiraju imena operatorskih funkcija?

A

U jeziku C++, operatori za korisničke tipove (klase) su specijalne funkcije.
Operatorske funkcije nose ime operator@, gde je @ neki operator ugrađen u jezik.
Operatorske funkcije preklapaju standaradne operatore (+, -, *, /, …).
Operatorske funkcije se mogu koristiti u izrazima kao i operatori nad ugrađenim tipovima.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Ograničenja u preklapanju operatora

A

Osnovna pravila:
C++ dozvoljava preklapanje operatora (operator overloading), kao što dozvoljava i preklapanje imena funkcija.
Princip preklapanja omogućava da se definišu nova značenja operatora za korisničke tipove.

Postoje neka ograničenja u preklapanju operatora:
ne mogu da se preklope operatori ., .*, ::, ?: i sizeof, dok svi ostali mogu;
ne mogu da se redefinišu značenja operatora za primitivne (standardne) tipove podataka;
ne mogu da se uvode novi simboli za operatore;
ne mogu da se menjaju osobine operatora koje su ugrađene u jezik: n-arnost, prioritet i asocijativnost.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Kako treba realizovati funkciju Ocena operator+ (int rok, Ispit a)?

A

Ako je @ neki binarni operator (na primer +), on može da se realizuje:

  • Kao funkcija članica klase X (mogu se argumenti prenositi i po referenci): operator@ (X) Poziv a@b se sada tumači kao: a.operator@(b), za funkciju članicu
  • Kao globalna prijateljska funkcija: operator@ (X,X) Poziv a@b se sada tumači kao: operator@(a,b) , za globalnu funkciju

Treba je realizovati kao globalnu operatorsku prijateljsku funkciju klase Ispit.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Šta treba da vrate operatori koji menjaju levi operand?

A

Operatori koji menjaju levi operand (npr. =) treba da vrate referencu na levi operand.
Primer
X& operator = (X& x)

Operatori koji biraju ili isporučuju operande (operator [] ili -> ili ()) treba da vrate reference na izabranu vrednost.
Operatori koji izračunavaju novu vrednost, a ne menjaju svoje operande (operatori nad bitovima, +, -, *, /, %, &, \, ^, &&, ||, unarni (-, +), !~) obično treba da vrate kopiju lokalno kreiranog objekta.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Navesti operatore za pristup članovima klase?

A

Članovima klase se pristupa pomoću dva operatora:
Operator tačka (.) - ovim operatorom se pristupa objektima ili referencama objekata. Operator pristupa clanu (.) se koristi na sledeci način: izraz.ime, gde ime predstavlja član objekta klase koji je predstavljen levim operandom izraz. Prema tome, levi operand mora biti objekat klase koji ima člana imenovanog desnim operandom.
Operator dereferenciranja pokazivača i pristupa članu (->) - ovim operatorom se pristupa pointerima, tačnije E1->E2 predstavlja člana E2 objekta na koji ukazuje E1.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Koji proces je suprotan procesu specijalizacije (ili generalizacije)?

A

U odnosu na veze kojima se izražava hijerarhija, nasleđivanje se posmatra u dva smera: generalizacija i specijalizacija.

Generalizacija je suprotan postupak od specijalizacije. Generalizacija je proces kojim se identifikuju i definišu zajednički atributi i funkcije u skupu objekata.

Specijalizacija je suprotan postupak od generalizacije u kome se za neki tip objekta definišu njegovi podtipovi koji imaju neka njima specifična svojstva.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Kako se definiše izvedena klasa?

A

Izvedena klasa se definiše navođenjem sledeće konstrukcije između identifikatora klase i znaka { :
SLIKA
Posle imena klase, stavlja se operator : . Opciono je da li će klasa biti virtuelno nasleđena iz druge, a zatim dolazi vrsta nasleđivanja (private, protected, public) od kojih zavisi vidljivost nasleđenih članova. Podrazumevani tip nasleđivanja je private.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Nacrtati i objasniti sintaksni dijagram za definisanje izvedene klase.

A

SLIKA

Posle imena klase, stavlja se operator : . Opciono je da li će klasa biti virtuelno nasleđena iz druge, a zatim dolazi vrsta nasleđivanja (private, protected, public) od kojih zavisi vidljivost nasleđenih članova. Podrazumevani tip nasleđivanja je private.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Koji je podrazumevani način izvođenja klase?

A

Podrazumevani tip nasleđivanja je private.

32
Q

Šta nasleđuje izvedena klasa?

A

Nasleđuje osobine osnovne klase. Sadrži sve članove podatke i članove funkcije iz osnovne klase.

33
Q

Šta ne nasleđuje izvedena klasa?

A

Izvedena klasa ne nasleđuje privatne atribute, funkciju članicu operator=, konstruktore ni destruktore osnovne klase.

34
Q

Ignorisanje inline zahteva

A
  • Ako je funkcija rekurzivna
  • Ako funkcija sadrzi petlju
  • Ako funkcija sadrzi staticke promenljive
  • Ako funkcija nije tipa void a u telu f-je nije navedena return naredba
  • Ako funkcija sadrzi switch i go to
35
Q

Nedostaci inline

A
  • Povecanje izvrsnog fajla
  • Smanjen instruction cache hit rate
  • Moguce povecanje vremena kompajliranja
  • Potencijalno povecanje registarskih promenljivih
  • Nisu korisne za vecinu embedded sistema jer je tu kritican prostor, a ne vreme izvrsenja
36
Q

Nacrtati tabelu prava pristupa elementima izvedene klase u zavisnosti od načina izvođenja.

A

POK:NPZJ

PUPIK:NNPP
PUZIK:NNZZ
PUJIK:NNZJ

37
Q

Navesti redosled poziva konstruktora pri kreiranju objekta izvedene klase.

A
  • inicijalizuje se podobjekat osnovne klase, pozivom konstruktora osnovne klase
  • konstruktori članova klase, po redosledu deklarisanja
  • izvršava se telo konstruktora izvedene klase
38
Q

Navesti redosled poziva destruktora pri uništavanju objekta izvedene klase.

A
Pri uništavanju objekta, redosled poziva destruktora je uvek suprotan redosledu poziva konstruktora.
Dakle:
*destruktor izvedene klase
*destruktor članova klase
*destruktor osnovne klase
39
Q

Kako je potrebno definisati izvođenje da bi izvedena klasa posedovala samo jedan podobjekat indirektne osnovne klase?

A

Potrebno je definisati ga kao virtual.

40
Q

Koji objekti se mogu dodeliti objektu osnovne klase?

A
Objektu osnovne klase se mogu dodeliti objekat osnovne klase i objekat izvedene klase.
Primer 
Osnovna b; 
Izvedena d;  
b=d;
41
Q

Šta je polimorfizam?

A

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. Ako izvedena klasa ne definiše virtualnu funkciju osnovne klase, ona jednostavno usvaja ponašanje osnovne klase. Virtualna funkcija je funkcija članica koja očekuje da bude redefinisana u nasleđenim klasama.

42
Q

Kako se definišu virtuelne funkcije kao statičke članice klase?

A

Virtuelne funkcije ne mogu biti statičke članice svojih klasa, ali mogu biti prijatelji drugih klasa.

43
Q

Slanje poruka objektima

A
  • Preko identifikatora ili reference na objekat (&) objektu saljemo poruke (.):
  • Preko pokazivaca objektu saljemo poruke koristeci operator (->)
44
Q

Povratna vrednost operatorskih funkcija preinkrement i predekrement.

A

Preinkrement i predekrement vraćaju reference na operand

Postinkrement i postdekrement obično treba da sačuvaju kopiju svog operanda, izmene operand i zatim vrate kopiju.

45
Q

Kako se definiše virtuelna statička funkcija za vraćanje vrednosti celobrojnog atributa neke klase?

A

Virtuelna funkcija se u osnovnoj klasi deklariše pomoću ključne reči virtual na početku deklaracije.
Virtuelne funkcije ne mogu biti statičke članice svojih klasa.

46
Q

Kada se aktivira virtuelni mehanizam?

A

Virtuelni mehanizam se aktivira samo ako se objektu pristupa preko reference ili pokazivača.

47
Q

Šta je čista virtuelna funkcija?

A

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

48
Q

Šta je apstraktna klasa?

A

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.

49
Q

Pomoću kojih operatora se može pristupiti objektima apstraktnih klasa?

A

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.

50
Q

Na koliko načina može da se definiše virtuelni konstruktor?

A

Ni na jedan način. Konstruktor ne može biti virtuelna funkcija (jer se poziva pre nego što se objekat kreira).
Destruktor može biti virtuelna funkcija.
Kada neka klasa ima neku virtuelnu funkciju, verovatno i njen destruktor (ako ga ima) treba da bude virtuelan.
Unutar destruktora izvedene klase ne treba pozivati destruktor osnovne klase (on se implicitno poziva).

51
Q

Navesti redosled poziva konstruktora pri kreiranju objekta kod višestrukog nasleđivanja.

A

Sva pravila o nasleđenim članovima važe i kod višestrukog nasledjivanja.
Konstruktori osnovnih klasa se pozivaju pre konstruktora članova izvedene klase i konstruktora izvedene klase.
Konstruktori osnovnih klasa se pozivaju po redosledu deklarisanja.
Destruktori osnovnih klasa se izvršavaju na kraju, posle destruktora izvedene klase i destruktora članova.

52
Q

Sintaksni dijagram za definisanje šablona.

A

SLIKA

Identifikatori tipa - (formalni argumenti šablona) mogu da se koriste unutar generičke funkcije ili klase na svim mestima gde se očekuju tipovi.

Identifikatori konstante - mogu da se shvate kao simboličke konstante i da se koriste unutar generičke funkcije ili klase svuda gde se očekuju konstante.

Oznaka tipa - za simboličke konstante mogu da budu standardni ili korisnički tipovi podataka.

Odvojeno prevođenje šablona nema smisla – šabloni se smeštaju u *.h datoteke i uključuju tamo gde se koriste.

Mana šablona: pošto su u *.h datotekama – korisnik vidi celu implementaciju algoritama, a ne samo interfejs.

53
Q

Načini za generisanje funkcija iz šablonskih funkcija.

A

Funkcije na osnovu zadatog šablona se generišu:

automatski - kad se naiđe na poziv generičke funkcije sa stvarnim argumentima koji mogu da se uklope u šablon bez konverzije tipova argumenata.

na zahtev programera - navođenjem deklaracije (prototipa) za datu generičku funkciju sa željenim argumentima.

54
Q

U kojim situacijama se generiše funkcija iz šablona?

A

Funkcije na osnovu zadatog šablona se generišu:

automatski - kad se naiđe na poziv generičke funkcije sa stvarnim argumentima koji mogu da se uklope u šablon bez konverzije tipova argumenata.

na zahtev programera - navođenjem deklaracije (prototipa) za datu generičku funkciju sa željenim argumentima.

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.
“Odgovarajuća generička funkcija” znači: stvarni argumenti se bez konverzije uklapaju u formalne argumente.
Generisanje funkcije iz šablona se vrši samo ako odgovarajuća funkcija (generisana ili definisana) ne postoji.

55
Q

Šta mogu biti formalni argumenti šablonske klase?

A

Formalni argumenti šablona klase mogu biti: tipovi (class T) ili prosti objekti (koji će biti konkretizovani konstantnim izrazima).

56
Q

Kako se vrši lokalna deklaracija šablonske klase?

A

Deklaracija šablona može biti samo globalna

57
Q

Kojom naredbom se kreira izuzetak?

A

Izuzetak se kreira naredbom throw izraz, gde izraz svojim tipom određuje koji hendler će biti aktivan. Vrednost izraza se prenosi hendleru kao argument.

58
Q

Nacrtati i objasniti sintaksni dijagram za obradu izuzetaka.

A

SLIKA

  • blok-1 je programski blok unutar kojeg mogu da se jave izuzeci.
  • argument se sastoji od oznake tipa i identifikatora argumenta.
  • … označavaju univerzalni hendler – on se aktivira ako ne postoji hendler sa adekvatnim tipom izuzetka.
  • blok-2 je telo hendlera.
  • blok-2 obrađuje izuzetke koji su se javili neposredno u blok-1 ili u nekoj funkciji koja je pozvana iz blok-1.
  • Jedan try block MORA imati makar jedan catch blok (što znači da ih može imati više). Ako se u try bloku pojavi izuzetak, odgovarajući catch blok hvata izuzetak i izvršava se njegovo telo. Ako se u try bloku ne pojavi izuzetak, preskaču se svi catch blokovi.
59
Q

Iz kojih funkcija se mogu izazvati izuzeci?

A

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.

60
Q

Kako se navodi spisak tipova izuzetaka koje funkcija izaziva?

A

U deklaraciji ili definiciji funkcija može da se navede spisak tipova izuzetaka koje funkcija izaziva.

Navođenje spiska tipova izuzetaka se postiže pomoću
throw (niz_identifikatora) iza liste argumenata

Ako se stavi ovakva konstrukcija, a funkcija izazove izuzetak tipa koji nije u nizu identifikatora – to je greška, tj. nepredvidivo ponašanje.
Ako se ništa ne navede, funkcija sme da prijavi izuzetak proizvoljnog tipa.

61
Q

Koja je namena funkcije set_terminate?

A

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.

62
Q

Koja je namena klasa fstream i strstream?

A

Dve osnovne klase
istream - ulaz
ostream - izlaz
Dve najvažnije klase koje se izvode iz klase iostream su:
***fstream, za rad sa datotekama
-ifstream - ulaz
-ofstream - izlaz
-fstream – ulaz i izlaz
**strstream, za rad sa nizovima (eng. strings, tj. tokovima u operativnoj memoriji)
-istrstream - za uzimanje podataka iz tokova
-ostrstream - za smeštanje podataka u tokove
-strstream - za uzimanje i smeštanja podataka u/iz tokova

63
Q

Od čega zavisi koliko se maksimalno može kreirati standardnih tokova?

A

Postoje 4 standardna toka (globalni statički objekti):
cout,cin,cerr,clog

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.

64
Q

Koliko maksimalno cin/cout objekata je moguće kreirati u main() funkciji?

A

Nijedan.

65
Q

Koliko objekata standardnih tokova je moguće kreirati u main()?

A

Objekti standardnih tokova ne mogu da se kreiraju jer su globalni statički objekti; kreiraju se prilikom pokretanja svake C++ aplikacije.

66
Q

Koliko globalnih statičkih objekata(standardnih tokova) možemo da kreiramo?

A

Ima ih 4, ne možemo.

67
Q

Koje je značenje vrednosti ios::trunc parametra dosmode?

A

Za parametre iosmode i dosmode koriste se sledeće vrednosti:

  • ios::app upisivanje na kraj datoteke
  • ios::ate pozicioniranje na kraj datoteke posle otvaranja
  • ios::in otvara ulaznu datoteku
  • ios::out otvara izlaznu datoteku
  • ios::nocreate otvara datoteku ukoliko već postoji
  • ios::noreplace otvara datoteku ukoliko već ne postoji
  • ios::trunc otvara datoteku i briše stari sadržaj
  • ios::binary binarna datoteka. Ako se ništa ne kaže, podrazumeva se rad sa tekstualnom datotekom.
68
Q

Koliko maksimalno blanko znaka može da sadrži ulazni podatak ako se za ulaz koristi operator&raquo_space;?

A

Operator&raquo_space; pamti ulazne podatke samo do prvog unetog blanko znaka.

69
Q

Koje je dejstvo operacije seekg?

A

Operacije get i getline se koriste za ulazne tokove tekstualnih datoteka, a read i za ulazne tokove binarnih datoteka. 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

70
Q

Šta je namespace? Navesti primer.

A

Namespace je okruženje izrađeno da sadrži logično grupisanje jedinstvenih indentifikatora. Ukoliko korisnik u svom programu radi sa više biblioteka može se dogoditi da se u njima nađu funkcije sa istim imenom koje rade različite stvari. Da bi se izbegla zabuna koja nastaje pozivom tih funkcija, mogu se sve funkcije pojedine biblioteke označiti dodatnim imenom naredbom namespace. Zadatak takvog označavanja je jednoznačno određivanje funkcija tj. mogućnost razlikovanja funkcija istog imena koje se nalaze u različitim bibliotekama. Postoje dva načina pozivanja tih funkcija. Može se koristiti binarni rezolucionarni operator (‘::’ - pr. prva::alfa) ili naredba using (pr. using namespace prva; alfa).
Std je jedan primer namespace-a.

71
Q

Kako se pristupa elementima kontejnerskih klasa definisanih u std?

A

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&laquo_space;umesto cout

72
Q

Koliko maksimalno neimenovanih namespace može biti definisano u jednom fajlu?

A

Jedan.

73
Q

Kakva je priroda generičkog mehanizma?

A

Statička jer se instance šablona prave tekstualnom zamenom u toku prevođenja.

74
Q

Šta predstavljaju instance klase iterator?

A

Instance klase iterator predstavljaju pozicije elemenata u različitim kontejnerskim klasama.

  • iteratori se uvek pridružuju nekoj kontejnerskoj klasi
  • tip zavisi od kontejnerske klase kojoj su pridruženi
75
Q

Na koliko nacina je moguce kreirati ulazni tok vezan za neku datoteku?

A

Postoji tri načina da se napravi ulazni tok
vezan za neku datoteku.
korišćenjem konstruktora bez argumenata
konstruktor sa argumentima tj navođenjem
naziva datoteke i odgovarajućih parametara
navođenjem deskriptora datoteke

76
Q

Koji header file je potrebno ukljuciti da bi mogli da koristimo funkciju find nad obj kontejnerske klasa?

A

< algorithm >