oop skripta 1

18
1. Inline funkcije Inline funkcije ispred funkcije sadrže ključnu rec inline. Dobro za male funkcije koje se često koriste (na primer samo prosleđuju 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 umanjuje broj poziva funkcija.Takođe kompajler može da ignoriše inline. Primer: inline double cube( const double s ) { return s * s * s; } *const kazuje kompajleru da funkcija ne menja s. 2. Navesti načine za definisanje inline funkcija (dati primer za svaki od njih). Telo inline funkcije se pise direktno u definiciji klase, ili se u definiciji klase ispred dekleracije funkcije navede kljucna rec inline, a implementacija se navodi iza definicije klase (u .h fajlu). class C { int i; public: int val () { return i; } // ovo je inline funkcija }; // ili: class D { int i; public: inline int val (); }; int D::val() { return i; }

Upload: dusan-velickovic

Post on 25-Sep-2015

66 views

Category:

Documents


5 download

DESCRIPTION

demo

TRANSCRIPT

1. Inline funkcije

Inline funkcije ispred funkcije sadre kljunu rec inline. Dobro za male funkcije koje se esto koriste (na primer samo prosleuju 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 umanjuje broj poziva funkcija.Takoe kompajler moe da ignorie inline. Primer:

inline double cube( const double s ) { return s * s * s; }

*const kazuje kompajleru da funkcija ne menja s.

2. Navesti naine za definisanje inline funkcija (dati primer za svaki od njih).

Telo inline funkcije se pise direktno u definiciji klase, ili se u definiciji klase ispred dekleracije funkcije navede kljucna rec inline, a implementacija se navodi iza definicije klase (u .h fajlu).class C

{

int i;

public:

int val ()

{

return i;

} // ovo je inline funkcija

};

// ili:class D

{

int i;

public:

inline int val ();

};int D::val()

{

return i;

}3. Konstruktori i destruktori.Konstruktor

Konstruktor je posebna funkcija klase koja ima isto ime kao I klasa (T() za klasu T), a sluzi da se definisu pocetne vrednosti podataka klase. Konstruktor se poziva u trenutku kreiranja objekta klase. Moze da bude bez argumenata ili da ima jedan ili vise argumenata. Konstruktor nema tip koji vraca. Konstruktor moe da ima argumente proizvoljnog tipa. Unutar konstruktora, clanovima objekta pristupa se kao i u bilo kojoj drugoj funkciji clanici. Takodje, moguce je da postoji I vise od jednog konstruktora (Overloading funkcija), pri cemu svaki mora da ima razlicitu listi argumenata. Koji ce konstruktor biti pozvan odredjuje se na osnovu liste argumenata. Ukoliko u klasi nije definisan ni jedan konstruktor prevodilac ce nam definisati konstruktor bez argumenata (takozvani podrazumevani konstruktor).

Destruktor

Specijalna funkcija klase koja se implicitno poziva u trenutku kada se objekat klase brise iz memorije je destruktor. Destruktor nema tip koji vraca. Destruktor je funkcija bez argumenata I u klasi moze da postoji samo jedan destructor. Identifikator destruktora je isti kao identifikator klase , sa prefiksom ~ na pocetku (~T() za klasu T). Ukoliko se ne definise destructor, podrazumeva se destructor sa praznim telom. Destruktori se uglavnom koriste kada objekat treba da dealocira memoriju ili neke sistemske resurse koje je konstruktor alocirao; to je najcece slucaj kada klasa sadri clanove koji su pokazivaci. Posle izvravanja tela destruktora, automatski se oslobadja memorija koju je objekat zauzimao. Da nema destruktora koji oslobadjaju memoriju doslo bi do njenog nestanka sto dovodi do toga da aplikacija pada (memory leak).

4. Vrste konstruktora (opis i namena).1.Podrazumevani konstruktor2.Konstruktor konverzije3.Konstruktori za kopiranje prave kopiju postojeceg objekta. Kada se objekat x1 klase XX inicijalizuje drugim objektom x2 iste klase, C++ e podrazumevano izvriti prostu inicijalizaciju redom lanova objekta x1 lanovima objekta x2.

To ponekad nije zadovoljavajue (esto ako objekti sadre lanove koji su pokazivai ili reference), pa programer treba da ima potpunu kontrolu nad inicijalizacijom objekta drugim objektom iste klase.

Za ovu svrhu slui tzv. konstruktor kopije (engl. copy constructor).

Konstruktor kopije klase XX se moe pozvati sa samo jednim stvarnim argumentom tipa XX.

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

1. prilikom inicijalizacije objekta (pomou znaka = ili sa zagradama);

2. prilikom prenosa argumenata u funkciju (kreira se lokalni automatski objekat);

3. prilikom vraanja vrednosti iz funkcije (kreira se privremeni objekat).

Konstruktor ne sme imati formalni argument tipa XX.

Konstruktor kopije ima argument tipa XX& ili (najee) const XX&.

Ostali eventualni argumenti kopirajueg konstruktora moraju imati podrazumevane vrednosti.

5. Redosled poziva konstruktora.Konstruktori i destruktori se Implicitno se pozivaju. To radi kompajler. Redosled poziva zaisi od redosleda izvravanja. Kada u toku izvravanja objekti dobijaju odnosno gube scope (oblast vaenja, doseg). Generalno, destruktori se pozivaju u suprotnom redosledu od redosleda poziva konstruktora.

Redosled poziva konstruktora i destruktora

Globalni objekti:

Konstruktori - Pre bilo koje druge funkcije (ukljuujui i main)

Destruktori - Kada se main zavrava (ili je pozvana exit funkcija). Ne poziva se ako se program zavri sa abort.

Automatski lokalni objekti:

Konstruktori - Kada se objekti definiu. Svaki put kada u toku izvrenja dobiju scope.

Destruktori - Kada objekti prestanu da vae tj gube scope (kada se zavrava blok u kome je objekat definisan).

Ne poziva se ako se program zavri sa exit ili abort.

Statiki lokalni objekti:

Konstruktori -Tano jedanput, kada se dodje do mesta gde je objekat definisan

Destruktori - Kada se main zavrava ili je pozvana exit funkcija. Ne poziva se ako se program zavrava sa abort.

6. Prijateljske funkcije.Prijateljske funkcije su funkcije koje nisu lanice klase, ali imaju pristup do privatnih lanova klase. Prijateljske funkcije mogu da budu: globalne funkcije ili lanice drugih klasa. Funkcija je prijateljska ako se u definiciji klase navede deklaracija funkcije sa kljunom rei friend ispred. Nevano je da li se deklaracija prijateljske funkcije navodi u privatnom ili javnom delu klase.Prijateljska funkcija nema pokaziva this na objekat klase kojoj je prijatelj. Prijateljstvo je relacija koja regulie pravo pristupa, a ne oblast vaenja i vidljivost identifikatora. Funkcija moe da bude prijatelj veem broju klasa istovremeno. U nekim situacijama su globalne prijateljske funkcije pogodnije od funkcija lanica: 1. funkcija lanica mora da se pozove za objekat date klase, dok globalnoj funkciji moe da se dostavi i objekat drugog tipa, koji e se konvertovati u potrebni tip;2. kada funkcija treba da pristupa lanovima vie klasa, efikasnija je prijateljska globalna funkcija; 3. ponekad je notaciono pogodnije da se koriste globalne funkcije (f(x)) nego lanice (x.f()); na primer: max(a,b) je itljivije od a.max(b); 4. kada se preklapaju operatori, esto je jednostavnije definisati globalne (operatorske) funkcije nego lanice.class X { friend void g (int X&); // prijateljska globalna funkcija friend void Y::h (); // prijateljska clanica h druge klase Y int i;public: void f(int ip) {i=ip;} }; void g (int k, X &x) { x.i=k; // prijateljska funkcija moze da pristupa } // privatnim clanovima klase void main () { X x; x.f(5); // postavljanje preko clanice g(6,x); // postavljanje preko prijatelja }Treba biti oprezan pri koriscenju prijateljskih funkcija da se ne bi narusio concept inkapsulacije.7. Prijateljske klase.

Ako je potrebno da sve funkcije lanice klase Y budu prijateljske funkcije klasi X, onda se klasa Y deklarie

kao prijateljska klasa (friend class) klasi X. Tada sve funkcije lanice klase Y mogu da pristupaju privatnim clanovima klase X, ali obratno ne vai ("prijateljstvo" nije simetricna relacija):

"Prijateljstvo" nije ni tranzitivna relacija: ako je klasa Y prijatelj klasi X, a klasa Z prijatelj klasi Y, klasa Z nije

automatski prijatelj klasi X, ve to mora eksplicitno da se naglasi (ako je potrebno). Prijateljske klase se tipicno koriste kada neke dve klase imaju tenje meusobne veze. Pri tome je nepotrebno (i loe) "otkrivati" delove neke klase da bi oni bili dostupni drugoj prijateljskoj klasi, jer ce na taj nain oni bitidostupni i ostalima (rui se enkapsulacija). Tada se ove dve klase proglaavaju prijateljskim. Na primer, na sledei nain moe se obezbediti da samo klasa Kreator moe da kreira objekte klase X:

8. Operatorske funkcije.

U jeziku C++, operatori za korisnike tipove (klase) su specijalne operatorske funkcije.

Operatorske funkcije nose ime operator@, gde je @ neki operator ugraen u jezik.

Operatorske funkcije preklapaju standaradne operatore (+, -, *, /, ...).

Operatorske funkcije se mogu koristiti u izrazima kao i operatori nad ugraenim tipovima

Ako je operatorska funkcija definisana na gornji nain izraz t1@t2 se tumai kao operator@(t1,t2):

Operatorske funkcije, osnovna pravila:

C++ dozvoljava preklapanje operatora (operator overloading), kao to dozvoljava i preklapanje imena funkcija.

Princip preklapanja omoguava da se definiu nova znaenja operatora za korisnike tipove.

Postoje neka ogranienja u preklapanju operatora:

1. ne mogu da se preklope operatori ., .*, ::, ?: i sizeof, dok svi ostali mogu;

2. ne mogu da se redefiniu znaenja operatora za primitivne (standardne) tipove podataka;

3. ne mogu da se uvode novi simboli za operatore;

4. ne mogu da se menjaju osobine operatora koje su ugraene u jezik: n-arnost, prioritet i asocijativnost.

Operatorske funkcije mogu biti:

1. funkcije lanice kod kojih je skrivreni argument levi operand ili

2. globalne funkcije (uglavnom prijatelji klasa) kod kojih je bar jedan argument tipa korisnike klase.

Za korisnike tipove su unapred definisana tri operatora: = (dodela vrednosti), & (uzimanje adrese) I , (lananje).

Sve dok ih korisnik ne redefinie, oni imaju podrazumevano znaenje.

Podrazumevano znaenje operatora = je kopiranje objekta lan po lan.

Pri kopiranju lanova tipa klase, pozivaju se operatori = klasa kojima lanovi pripadaju.

Ako je lan objekta pokaziva, kopirae se samo taj pokaziva, a ne i pokazivana vrednost.

Kada treba kopirati i objekat na koji ukazuje lan-pokaziva korisnik tada treba da redefinie operator =.

Vrednosti operatorskih funkcija mogu da budu bilo kog tipa, pa i void.

Ako se simbol operatora sastoji od slova (npr new), mora se pisati odvojeno od kljune rei operator.

Boni efekti i veze izmeu operatora

Boni efekti koji postoje kod operatora za ugraene tipove nikad se ne podrazumevaju za redefinisane operatore.

To vai za operatore ++ i - (prefiksne i postfiksne) i sve operatore dodele (=, +=, -=, *= itd.).

Operator = (i ostali operatori dodele) ne mora da menja stanje objekta; ipak, ovakve upotrebe treba izbegavati.

Strogo se preporuuje da operatori koje definie korisnik imaju oekivano znaenje, radi itljivosti programa. Na primer, ako su definisani i operator += i operator +, dobro je da a+=b ima isti efekat kao i a=a+b.

Veze koje postoje izmeu operatora za ugraene tipove se ne podrazumevaju za redefinisane operatore.

Na primer, ako je definisan operator +, a+=b ne znai automatski a=a+b, (+= mora posebno da se definie). Kada se definiu operatori za klasu, treba teiti da njihov skup bude kompletan.

Na primer, ako su definisani operatori = i +, treba definisati i operator +=; ili, za == treba definisati i !=.9. Nabrojati naine za realizaciju operatorskih funkcija i navesti primere. Ako je @ neki binarni operator (na primer +), on moe da se realizuje: 1. Kao funkcija lanica klase X (mogu se argumenti prenositi i po referenci): operator@ (X) Poziv a@b se sada tumai kao: a.operator@(b) , za funkciju lanicu, ili 2. Kao prijateljska globalna funkcija: operator@ (X,X) Poziv a@b se sada tumai kao: operator@(a,b) , za globalnu funkciju Nije dozvoljeno da se u programu nalaze obe ove funkcije.

Unarni i binarni operatori Unarni operator ima samo jedan operand, pa se moe realizovati: 1. kao operatorska funkcija lanica bez argumenata: tip operator@ () 2. kao globalna funkcija sa jednim argumentom: tip operator@ (X x) Binarni operator ima dva argumenta, pa se moe realizovati 1. kao funkcija lanica sa jednim argumentom: tip operator@ (X xdesni) 2. kao globalna funkcija sa dva argumenta: tip operator@ (X xlevi, X xdesni)

10. Povratna vrednost operatorskih funkcija.-operatori koji menjaju levi operand (npr. =) treba da vrate referencu na levi operand.

-operatori koji biraju ili isporuuju operande (npr. [], ->, ()) obino treba da vrate referencu na izabranu vrednost.

-operatori koji izraunavaju novu vrednost, a ne menjaju svoje operande (operatori nad bitovima, +, -, *, /, %, &, \, ^, &&, ||, unarni (-, +), !~) obino treba da vrate kopiju lokalno kreiranog objekta.

-preinkrement i predekrement - obino treba da vrate referencu na operand.

-postinkrement i postdekrement - obino treba da sauvaju kopiju svog operanda, izmene operand i zatim vrate kopiju.

11. Naini izvodjenja.

postoji nekoliko vrsta nasledjivanja: private, proteted i public. Zavisno od vrste nasledjivanja ce se menjati i pristupacnost clanova izvedene klase. Na primer, ukoliko je pristupnost nekog clana roditeljske klase public, i ukoliko se podklasa privatno izvede (private), onda ce pristupnost tog istog clana u izvedenoj klasi biti private.

odnos "sastoji se od" znaci da izvedena klasa sadrzi kopiju osnovne i svu njenu funkcionalnost, ali objekti izvedne klase ne mogu da se koristre u slucajevima kada se zahtevaju objekti osnovne klase. Kod privatno izvedene klase javni clanovi osnovne klase postaju privatni u izvedenoj klasi. 12. Objasniti polimorfizam.

Svojstvo da svaki objekat izvedene klase izvrava metod tano onako kako je to definisano u njegovoj

izvedenoj klasi, kada mu se pristupa kao objektu osnovne klase, naziva se polimorfizam (engl. polymorphism). Polimorfizam omogucava da klasa saopsti da ima isti interfejs kao i osnovna klasa ali da je ponasanje izvedene klase razlicito od ponasanja osnovne klase.Polimorfizam se postize deklarisanjem zeljenih funkcija osnovne klase virtualnim.Ako izvedena klasa ne definese virtualnu funkciju osnovne klase, ona jednostavno usvaja ponasanje osnovne klase.Virtualna funkcija je funkcija clanica koja ocekuje da bude redefinisana u nasledjenim klasama.

Pretpostavimo da smo projektovali klasu geometrijskih figura sa namerom da sve figure imaju funkciju

crtaj() kao lanicu. Iz ove klase izveli smo klase kruga, kvadrata, trougla itd. Naravno, svaka izvedena klasa treba da realizuje funkciju crtanja na sebi svojstven nain (krug se sasvim drugaije crta od trougla). Sada nam je potrebno da u nekom delu programa iscrtamo sve figure koje se nalaze na naem crteu. Ovim figurama pristupamo preko niza pokazivaa tipa figura*. C++ omoguava da figure jednostavno iscrtamo prostim navodjenjem:

Iako se u ovom nizu mogu naci razlicite figure (krugovi, trouglovi itd.), mi im jednostavno pristupamo kao figurama, jer sve vrste figura imaju zajednicku osobinu "da mogu da se nacrtaju". Ipak, svaka od figura ce svoj zadatak ispuniti onako kako joj to i prilii, odnosno svaki objekat ce "prepoznati" kojoj izvedenoj klasi pripada, bez obzira to mu se obraamo "uopteno", kao objektu osnovne klase. To je posledica nae pretpostavke da je i krug, i kvadrat I trougao takodje i figura.13. Koji je uslov za aktiviranje virtuelnog mehanizma?

Virtuelni mehanizam se aktivira samo ako se objektu pristupa preko reference ili pokazivaa.class Osnovna { public: virtual void f(); };

class Izvedena : public Osnovna { public: void f(); }; void g1(Osnovna b) { b.f(); }void g2(Osnovna *pb) { pb->f(); } void g3(Osnovna &rb) { rb.f(); } void main () { Izvedena d; g1(d); // poziva se Osnovna::f g2(&d); // poziva se Izvedena::f g3(d); // poziva se Izvedena::f Osnovna *pb=new Izvedena; pb->f(); // poziva se Izvedena::f Osnovna &rb=d; rb.f(); // poziva se Izvedena::f Osnovna b=d; b.f(); // poziva se Osnovna::f delete pb; pb=&b; pb->f(); // poziva se Osnovna::f }

14. Viestruko izvodjenjeviestruko nasleivanje (multiple inheritance) - klasa nasleuje osobine vie osnovnih klasa. Primer: "motocikl sa prikolicom" je vrsta "motocikla", ali je i "vozilo sa tri toka". Pri tome "motocikl" nije "vozilo sa tri toka" niti je "vozilo sa tri toka" vrsta "motocikla". Klasa se deklarie kao naslednik vie klasa tako to se u zaglavlju deklaracije navode osnovne klase. Ispred svake osnovne klase treba da stoji re public, da bi izvedena klasa nasleivala prava pristupa lanovima. class Izvedena : public Osnovna1, public Osnovna2, private Osnovna3 {/* ... */};

Moe i private i protected. Podrazumevani: private za klasu i public za structKonstruktori I destruktori visestruko nasledjivanje

Sva pravila o nasleenim lanovima vae i kod viestrukog 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 izvravaju na kraju, posle destruktora izvedene klase i destruktora lanova.Ako klasa ima viestruku nevirtuelnu osnovnu klasu X onda e objekti te klase Imati vie podobjekata tipa X lanovima osnovne klase X moe se pristupiti nedvosmislenim navodjenjem njihove pripadnosti, korienjem operatora : : VIzv :: Izv1 :: Osnovna :: X

Konverzija pokazivaa tj reference na izvedenu klasu u pokaziva/referencu na viestruku osnovnu klasu moe se izvriti samo ako je nedvosmislena !!!

Nedvosmislenost znai da ne postoje dva ili vie entiteta koja odgovaraju navedenom imenu void VIzv :: fun() { x=2; // dvosmislenost, Izv1::X ili Izv2::X , Greka !!! Izv1::x = Izv2::x + 1; // ispravno }

Nije dozvoljeno da jedna klasa bude viestruka direktna osnovna klasa !!! class A : public X, public X

{ }15. Nacrtati i objasniti sintaksni dijagram za definisanje ablona.

-Identifikatori tipa - (formalni argumenti ablona) mogu da se koriste unutar generike funkcije ili klase na svim mestima gde se oekuju tipovi.

-Identifikatori konstante - mogu da se shvate kao simbolike konstante i da se koriste unutar generike funkcije ili klase svuda gde se oekuju konstante.

-Oznaka tipa - za simbolike konstante mogu da budu standardni ili korisniki tipovi podataka.

-Odvojeno prevoenje ablona nema smisla abloni se smetaju u *.h datoteke i ukljuuju tamo gde se koriste.

-Mana ablona: poto su u *.h datotekama korisnik vidi celu implementaciju algoritama, a ne samo interfejs.

16. Generike funkcijeFunkcije na osnovu zadatog ablona se generiu:

1.automatski - kad se naie na poziv generike f-je sa stvarnim argumentima koji mogu da se uklope u ablon bez konverzije tipova argumenata.

2. na zahtev programera - navoenjem deklaracije (prototipa) za datu generiku f-ju sa eljenim argumentima.

-Kada naie na poziv funkcije za koju ne postoji definicija, a postoji odgovarajua generika funkcija, prevodilac generie odgovarajuu definiciju funkcije.

-"Odgovarajua generika funkcija" znai: stvarni argumenti se bez konverzije uklapaju u formalne argumente.

-Generisanje na zahtev se postie navoenjem prototipa sa tipovima stvarnih argumenata.

-Pri pozivanju generisane funkcije vre se uobiajene konverzije tipova.

-Generisanje funkcije iz ablona e biti spreeno ako se prethodno pojavi definicija odgovarajue funkcije.

-Generisanje funkcije iz ablona se vri samo ako odgovarajua funkcija (generisana ili definisana) ne postoji

Da bi generika funkcija mogla da se pozove za argumente i tipove, mora da se trai formiranje konkretne funkcije. Tako generisana funkcija koristi se kao i obina funkcija, pa e stvarni argumenti neodgovarajueg tipa da se konvertuju u potreban tip pre poziva funkcije, ali samo ako postoji odgovarajua automatska konverzija tipa.17. Nacrtati i objasniti sintaksni dijagram mehanizma za obradu izuzetaka.

blok-1 je programski blok unutar kojeg mogu da se jave izuzeci.

argument se sastoji od oznake tipa i identifikatora argumenta.

... oznaavaju univerzalni hendler on se aktivira ako ne postoji hendler sa adekvatnim tipom izuzetka.

blok-2 je telo hendlera.

Definicija hendlera lii na definiciju funkcije sa tano jednim argumentom.

Kae se da je hendler tipa T ako je njegov argument tipa T, odnosno ako obrauje izuzetke tipa T.

blok-2 obrauje izuzetke koji su se javili neposredno u blok-1 ili u nekoj funkciji koja je pozvana iz blok-1.

Nakon izvrenja blok-2 kontrola se ne vraa na mesto gde se pojavio izuzetak.

Unutar blok-1 ili u pozvanim funkcijama iz blok-1 mogu da se pojave ugnjedene naredbe try.

Ako se u blok-1 ne javi izuzetak, preskau se svi hendleri (kontrola se prenosi na kraj naredbe try).

18. Neprihvaeni izuzeci.-Ako se za neki izuzetak ne pronae hendler koji moe da ga prihvati

-kada se detektuje poremecen stek poziva

-kada se u destruktoru, u toku odmotavanja steka, postavi izuzetak izvrava se sistemska funkcija:

void terminate(); -Podrazumeva se da ova funkcija poziva funkciju abort() koja kontrolu vraa operativnom sistemu.

-Ovo se moe promeniti pomou funcije set_terminate.

-Njoj se dostavlja pokaziva na funkciju koju treba da pozove funkcija terminate umesto funkcije abort.

-Pokazivana funkcija mora biti bez argumenata i bez rezultata (void).

-Vrednost funkcije set_terminate je pokaziva na staru funkciju koja je bila pozivana iz terminate.

-Iz korisnike funkcije (*pf) treba pozvati exit() za povratak u operativni sistem.

-Pokuaj povratka sa return iz korisnike funkcije (*pf) dovee do nasilnog prekida programa sa abort().

typedef void (*PVF) (); PF set_terminate(PVF pf);-Ako se u nekoj funkciji izazove izuzetak koji nije na spisku naznaenih izuzetaka, izvrava se funkcija:

void unexpected(); -Podrazumeva se da ova funkcija poziva funkciju terminate().

-Ovo se moe promeniti pomou funcije set_unexpected. -Njoj se dostavlja pokaziva na funkciju koju treba da pozove funkcija unexpected umesto terminate.

-Pokazivana funkcija mora biti bez argumenata i bez rezultata (void).

-Vrednost funkcije set_unexpected je pokaziva na staru funkciju koja je bila pozivana iz unexpected.

-Pokuaj povratka sa return iz korisnike funkcije (*pf) dovee do nasilnog prekida programa sa abort().

typedef void (*PF) (); PF set_unexpected(PF pf);void fun() throw (iz1, iz2) {

}

ili

void f() {

try {

}

catch (iz1) {throw;}

catch (iz2) {throw;}

catch () {unexpected();}

}

19. Nabrojati i opisati standardne tokovePostoje 4 standardna toka (globalni statiki objekti) :cin glavni (standardni) ulaz tipa istream (objekat klase istream_withassign) . Standardno predstavlja tastaturu, ukoliko se drugaije ne specificira (da se izvri skretanje glavnog ulaza unutar samog programa ili u komandi operativnog sistema za izvravanje programa).

cout glavni (standardni) izlaz tipa ostream (objekat klase ostream_withassign). Predstavlja ekran, koristi se za ispisivanje podataka koji ine rezultate izvravanja programa.

cerr standardni izlaz za poruke tipa ostream. Predstavlja ekran, obino se koristi za ispisivanje poruka o grekama.

clog standardni izlaz za zabeleke tipa ostream. Predstavlja ekran, koristi se za voenje evidencije o dogaajima za vreme izvrenja programa.20. Operacije izlaznog toka.Kao i kod ulaznog toka, i ovde se koriste iste operacije za otvaranje i zatvaranje toka (open i close).

Za rad sa karakterima koristi se operacija put. Ona smeta zadati znak u izlazni tok. Na primer: cout.put ('A'); daje isti rezultat kao i

cout