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