misliti na jeziku c++

300
Misliri na jeziku C++ , ' ,,1:" ., :' 'Bruce Eckel MindView, Inc.,predsednik , :i., Preveli Lj ilj ana Iovanovii- Stanisavlj evii IelenaVudiievii Igor Marid ffi E

Upload: sceko

Post on 07-Aug-2018

352 views

Category:

Documents


59 download

TRANSCRIPT

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 1/300

Misliri

na

jeziku

C++

,

'

,,1:"

.,

:'

'Bruce

Eckel

MindView,

Inc.,predsednik

,

:i.,

Preveli

Lj

ilj ana

Iovanovii-

Stanisavlj

evii

IelenaVudiievii

Igor Marid

ffi

E

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 2/300

SaonZnt

Stale

novo

u drugom

izdanju

. . . . 2

Sta

se

nalazi

u drugom

tomu

oveknjige

........2

KakodoCido

drugogtoma...'...'....3

Preduslovi.

..

'....3

UdenjeC++-a.

...........3

Ciljevi.

...........4

Poglavlja

.........5

Zadaci ...........8

Relenja

zadataka...

.

.. ..

'.

'....

.

..

...8

Izvornik6d...

...........8

Standardijezika....

.....

'

9

Podr5kajeziku

............10

Prateiikompaktdisk......

.. .

.. I0

Kompakt

diskovi,

seminari

isavetovanja

....11

Gre5ke

.....

'.. '.11

Okoricama.

.....11

Dizajn

i

pripremaknjige.

. .

...

..12

Zahvalnice

......13

Razvojapstrakcije.

......16

Objekatimainterfejs

....18

Skrivenarealizacila.

.....19

Ponovna

upotreba

realizaciie

. . .20

Nasledivanje:

ponovna

upotrebainterfejsa.

.....2l

Relacije,je"i,,ie-kao"

.......24

Zamenljivi

objekti

i

polimorfizam....

.....25

Inicijalizacija

i uni5tavanje

objekata

........28

Obrada

izuzetaka:

radsgre5kama......

....29

Analizai

projektovanje

.

..

.

..

.

..30

FazaO:Pravimoplan

.....

...,....

..32

Faza

I: Stapravimo?.......'.........33

Faza 2:

Kako Cemo

izgraditi

sistem?

.35

Faza3:

Gradimoiezgro

......

..

-....38

Faza

4: Razvijamo

sludajeve

kori5denla

. ....

'..38

Faza5:Evolucija

.........

'.39

Planiranjese

ispIati.........

".......40

Ekstremno

programiranje

.

.'

.' .

41

Prvo sastavitetestove.........,....'.41

Programiranjeuparu....

..,.....,,,,42

Za5toC++uspeva

.......43

Bolji

C..

.... . . ..

..43

VeCstenauzlaznoj

liniji

.

.......

....44

Efikasnost

........44

Sisteme

je

laKe

opisati

i razumeti

.

. .

.44

Maksimalna

dobit

od biblioteka.

.. . .

.45

Ponovna

upotreba

izvornog

koda

uzlablone.

....

'. '45

Obrada

greSaka

.

'...

..

'....45

Programiranje

sloZenih

sistema

..'

..

.45

Strategije

unapredivanja.

. .

. . . .

. 46

Uputswa

......."46

TeSkoCeupravljanja

.....

............47

SaZetak

.........49

Postupakprevodenja

jezika.

. .

. . 52

Interpretatori

..............52

Prevodioci.

..........

"

'..53

Postupakprevodenja................53

Alatke

za

odvojeno

prevodenje.

.....55

Deklaracije

ili

definiciie.............'55

Povezivanje.

.............'59

Upotreba

biblioteka

.

. . .

.....

.

. .

.....60

VaSprviC++

program

....

......

61

Upotreba

klasa ulazno-izlaznih

tokova..

..........61

Imenskiprostori

.......

. .62

Osnorma

struktura

programa... ......63

,,Zdravo,

svete "

.. ...... ...il

Prevodenje

...

'...65

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 3/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 4/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 5/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 6/300

,i:

J..

:.tl

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 7/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 8/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 9/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 10/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 11/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 12/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 13/300

Misliti

na

ieziku

C++

porodica

Pollock,

Peter

Vinci,

porodica

Robbins, porodica

Moelters,

Dave

Stoner,

Laurie

Adams, porodica

Cransron,

Larry

Fogg,

Mike

i

Karen

Sequeira,

Gary Entsminger

i

Allison

Brody,

Kevin,

sonda i

Ella Donovan,

chester

i

stran-

non

Atrdersen,

Ioe

Lordi,

Dave

i

Brenda

Bartlett, porodica

Rentschler,

L1.nn

i

Todd i

njihove porodice.

I,

naravno,

moji

mama

i tata.

e

r,r'

,.:.

P,iogramski

jezici

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 14/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 15/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 16/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 17/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 18/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 19/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 20/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 21/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 22/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 23/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 24/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 25/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 26/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 27/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 28/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 29/300

k

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 30/300

.

:-:-*

.

:-;

ffi

ffi

ffi

S.I'

ffi

h

tu_

h

r'

t

&r

F

E

E

ffi

F

n

E

s

E,

[

H.

I

r

I

E

t

E

p

T

t

I

E

h

$

v,

$

I

r

j

2=

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 31/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 32/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 33/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 34/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 35/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 36/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 37/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 38/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 39/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 40/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 41/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 42/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 43/300

rl

:i:,

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 44/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 45/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 46/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 47/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 48/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 49/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 50/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 51/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 52/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 53/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 54/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 55/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 56/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 57/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 58/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 59/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 60/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 61/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 62/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 63/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 64/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 65/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 66/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 67/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 68/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 69/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 70/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 71/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 72/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 73/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 74/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 75/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 76/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 77/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 78/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 79/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 80/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 81/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 82/300

ri

4=

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 83/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 84/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 85/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 86/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 87/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 88/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 89/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 90/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 91/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 92/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 93/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 94/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 95/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 96/300

184

Misliti

na

jeziku

C++

21.

(.++

z.a

stnrkture aLltontatski pravi

definiciju

tipa

(ekvavilent

izrazatype-

def),

kao Sto ste videli

u ovom

poglavlju.

Isto

radi

i

za nabrojive

tipove

i

unije. NapiSite

mali

program

kojim

se

to

pokazuje.

22. Napravite

stek koji sadrZi

objekte tipa

Stash. Svaki

objekat tipa Stash

ie

sadrZati

pet

redova

iz

ulazne

datoteke.

Objekte

tipa

Stash napravite

pomoiu

operatora

new

Ueitajte datoteku

u

stek, a zatim

je

ispi5ite

tako

Sto

iete

ditati

redove iz steka.

t

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 97/300

23.lzmenite

zadatak 22:

spoljnu

struktura za stek

koji

sadrZi objekte

tipa

Stash. Korisnik moZe

da dodaje

i

uzima redove

samo

preko

funkcija dla-

nica,

ali struktura

u suStini koristi

stek objekata

tipa Stash.

24.

Napravite

strukturu

koja

sadrZi

podatak

tipa

int

i

pokazivad

na drugu

instancu iste

strukture. Napi5ite

funkciju

diji su argumenti

adresa

jedne

od

ovih struktura

i ceo

broj

koji

ukazuje

na

duZinu liste koju

hoiete

da

napravite.

Ova

lunkcija

treba da napravi

ceo lanac

struktura

(pouezanu

llsru),

poiev

od argumenta

(glaualiste),

pri

demu svaka

struktura

pokazuje

na

sledeiu.

Nove

strukture pravite

primenom

operatora

new

a

broj

(redni

broj objekta)

smestite u

podatak

tipa

int.

U

poslednjoj

strukturi liste

poka-

zivadu

dodelite vrednost

0, kako

bi

se

ukazalo

daje to

kraj. Napi5ite drugu

funkciju

diji

je

argument glava

liste

i

koje se

pomera

do

njenog kraja,

ispisujuii

za svaku strukturu

wednost

pokazivaea

i

celobrojnu vrednost.

25.

Ponovite zadatak

24,

ali funkcije

smestite

unutar

strukture, umesto

da

koristite

obidne

strukture

i

funkcije.

\.

it

..l.

:.r]$'

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 98/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 99/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 100/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 101/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 102/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 103/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 104/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 105/300

202

Misliti

na

jeziku

C++

14. Napravite

klasu

Stackoflnt

(stek

za

cele brojeve)

kori5ienjem

tehnike

,,Cheshire

cat".

'ia

tehnika skriva

strukturu

podataka niskog nivoa,

koju

koristite

za sme5tanje elemenata

u

klasu Stacklmp.

Realizujte

dve verzije

klase Stacklmp:

jednu

koja

koristi niz celih

brojeva

fiksne duZine,

i

drugu

koja koristi

vector<int>. U

prvoj

verziji ne morate

da brinete o

proSirivanju

niza,

jcr

ste unapred

zadali maksimalntr

veliiinu

steka. Obratite

paZnju

na

to

cla

klasa Stackoflnt.h

ne

mora

da

se

menja zajedno sa

Stacklmp.

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 106/300

I

:

,i

t)

I

v'

6;

lr.ucrJALrzAcUA

I

ctscENJE

lJ,E''i

;

U,

poglavJig'4.s'tno

znaE4jtr'o,,tipapqg-dili

koriS(enie

biblioteke,'

jer

smo

r:iasrite

ktirnp.oletlgi'

uoli{aiene

bibliotg}ie

jgzifa,

C

skupili

i

tapsutirali'u'

strukturti

{apqtr,a]+4i,tip

podl3ka,

koji

iemo

odsad

zvatiklaia).'

''':

. ',

'

"

f:1

i:.i:.

''i:

.:.

MEI\,IOR

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 107/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 108/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 109/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 110/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 111/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 112/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 113/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 114/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 115/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 116/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 117/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 118/300

228

Misliti na

jeziku

C++

#i ncl ude

<i

ostream>

#i nc'l

ude

<cassert>

using namespace

std;

const

int increment

=

100;

Stash::Stash(int

sz)

{

>rze

-

5z;

quantitY

=

0;

next =

0;

storage

= 0;

i

Poglavlje

7:

Preklapanje

funkcija i

podrazumevani

argumenti 229

int

Stash::count0

(

return next;

//

Broj

elemenata

)

void

Stash:

:inflate(int

increase)

{

assert

(i

ncrease

,=

0)

;

if(increase

==

0)

return;

'int

newQuantily

= quantity

+

increasel

int neviBytes

=

newQuantity

*

sjzel

int oldBytes

=

quantity

*

srze;

unsigned char*

b

=

new unsigned char[newBytes];

<

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 119/300

Stash::Stash(int

sz, int initQuantity)

{

si

ze

=

sz;

quanti

ty

=

0;

next

=

0;

storage

= 0;

i

nf1

ate

(

i ni

tQuanti

ty)

;

I

Stash::-Stash0

{

if(storase

=

0)

{

cout

<<

"os1

obadjam

memoriju"

<.

endl

;

de1

ete

[]

storage;

i

)

int

Stash::add(void*

element)

{

i f(next

>=

quanti

ty)

I

I

Da 1

i je

ostaio

dovoljno

prostora?

inflate(increment);

II

Kopira

eiemente u skladi5te,

ll

poe;njuei

od sledeceg

praznog prostora:

int

startBytes

=

next

*

size;

unsi

gned

char"

e

=

(unsi

gned

char*) e1 ement;

for(int

i =

0;

i

<

size; i++)

storageIstartBytes

+

i]

= eIi];

next++;

return(next

-

t);

l/

Indeksni broj

)

voi

d*

Stash :

:

fetch

(

i nt i ndex)

{

require(0

<=

index,

"stash::fetch

(-)index");

i

f(i

ndex

>=

next)

return

0;

f f

Za ozna(.avanje kraja

I I

Pravi

pokazi

vad na

el ement:

return

&(storageIindex

*

size]

);

I

for(int

i

=

0;

i

oldBytes;

i++)

b[i]

=

storagell);

//

Kopira stari

blok

u

novi

del ete

[]

(storage)

;

//

0sl

obada

staro

skl adi 5te

storage

=

6;

//

Pokazuje na novi memorijski blok

quantjty

=

newQuantity;

//

Podeiava

velidinu

\

l//,-

Prvi

konstruktor ne

zauzima

memoriju

za

pokazival

storage.

Memorija

se

zavzimatek kada

prvi put

dodate objekat, funkcijom

add(

),

kao i svaki

put

kada

se

prepuni

tekuie skladi5te.

Oba

konstruktora

su

upotrebljena

u

probnom programu:

/ /

: C07 :Stash3Test.cpp

//{L)

Stasna

/ I

Preklapanje funkcija

#i ncl ude

"Stash3.

h"

#incl ude

"../requi

re.h"

#i ncl ude

<fstream>

#i ncl ude

<i

ostream>

#include

<string>

using namespace

std;

int mainO

{

Stash

i ntStash

(si

zeof(i nt)

) ;

for(int

i

=

0;

i

<

100; i++)

i ntStash.

add

(&i

)

;

for(int

j

= 0;

j

<

intStash.count0;

j++)

cout

<<

"intStash.fetch("

.. j ..

")

=

"

<<

*(

int*)

intStash.fetch(j)

<<

endl;

const

int

bufsize

=

B0;

Stash stringstash(sizeof(char)

*

bufsize,

100)

i

i fstream in("Stash3Test,cpp")

;

assure(in,

"Stash3Test.cpp")

;

string line;

whi

1 e(get1

ine(in,

I ine)

)

stringStash.add(

(char*)

l

ine.c

str0)

;

intk=0;

char*

cpl

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 120/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 121/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 122/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 123/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 124/300

240

Misliti

na

jeziku

C++

3. Lltwdite

kako

vas

prevodiiac

moZe

da

napravi

asemblerski

prevod i ekspe-

rimentiSite

da

biste

utwdili

Semu

za obeleZavanje

imena'

4. Napravite

klasu

s detiri

funkcije

dlanice,

koje

imaju

0,

1,2

i 3

celobrojna

argumenta.

Napisite

glavni

program

koji

pravi objekat

te

klase

i

poziva

.rik,

funk.i;u

8lanicu.

Sada

izmenite

klasu

tako

da ima

samo

jednu

funk-

ciju

dlanicu

diji

su

svi argrtmenti

podrazumevani.

Da

li ovo

menja

vas

glavni

program?

5.

Napravite

funkciju

s dva

argumenta

ipozovite

je

iz

glavnog

programa'

Zaiim od

jednog

argumenta

napravite

laZni argument

(bez

identifikatora)

i

pogledaite da

li se

menja

poziv u

glavnom

programu.

6.

Izmenite

datoteke

Stash3.h

i

Stash3.cpp

da

biste

upotrebili

podrazume-

vane argumente

u

konstruktoru.

Testirajte

konstruktor

praveii

dve

razli-

i

;1.

l'

r'

.i,i

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 125/300

dite

verzije

objekta

dinamidkog

niza.

7.

Napravite

nor,u

verziju

klase steka

(iz

poglavlja

6),

koja

sadrZi

podrazume-

vani konstruktor,

kao

i ranije,

i

ios

jedan

konstruktor

koji ima

sledece

argu-

mente:

niz

pokazivada

na objekte

i

velidinu

tog

niza. Ovaj

konstruktor

bi

trebalo

da se

kreie

krozoiz

i

stavlja

svaki

pokazivad

na stek.

Testirajte

vasu

klasu

pomoiu

niza

podataka tipa

string.

8.

Izmenite

promenljivu

SuperVar

tako

da se

komandom

#ifdef

obuhvati

kod

u kome

se

koristi

vartlpe,

kao Sto

smo

objasnili

razmatrajuii

nabrojivi

tip.

Od

vartype

napravite

regularnu

i

javnu

nabrojir,u

listu

(bez

instanci)

i

izme-

nite funkciju

printO tako

da

zahteva

argument

tipa

vartype

da

bi

znala

sta

da

uradi.

9.

Realizujte

Mem2.h

tako

da

izmenjena

klasa

i

dalje

radi

s

datotekom

MemTest.cpp.

10.

Iskoristite

klasu

Mem

za

realizaciju

dinamidkog

niza.

Posto

je

realizacija

privatna,

znadi skrivena od

klijenta,

probni

kdd

ne

mora

da

se

menja'

I l.

U

klasi

Mem

dodajte

funkciju

ilanicu

movedO

koja

na osnovu

rezultata

funkcije

pointerO

govori da

li

se

pokazivad

pomerio

(usled

naknadnog

dode-

ljivanja

memorije).

Napisite

glavni

program koji testira

funkciju

moved0.

Da

Ii

ima

vise smisla

da

koristite

funkciju

movedO,

ili da

pozivate funkciiu

pointer0

svaki

put

kada

treba da

pristupite memoriji

u

klasi

Mem?

..i'r'ii'::

'i.'

1

.

Lt

i,

Ir'

 ]/

lr'

1,.'

I

i':

'

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 126/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 127/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 128/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 129/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 130/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 131/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 132/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 133/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 134/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 135/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 136/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 137/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 138/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 139/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 140/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 141/300

Efikasnost

je

jedna

odvaZnihkq,rak(e.dptikp-kojujg C++

nasledio

od

jezika

C.

Da C++

nije

tako'delowo,ran,

rnndgi

programeri

ne

bi

ni

koristili

taj

jezik.

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 142/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 143/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 144/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 145/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 146/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 147/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 148/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 149/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 150/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 151/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 152/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 153/300

. ,/jr.1-r

"f

.."

'i:..',.'.''',

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 154/300

/

1;'..

1....r, i.:,i:"-.

.,

;

i.

i

r

1:r

i)

.r

:-t

::..,:i,

-i :.'** 'rl

1'

,

t'::l.id.*.1"'l:.

:.'

-

"

'

.;

j:'

,"':,,

-.

:'

'

I

.

;

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 155/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 156/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 157/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 158/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 159/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 160/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 161/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 162/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 163/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 164/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 165/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 166/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 167/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 168/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 169/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 170/300

330

Misliti

na

jeziku

C++

3

I . Naprarrite

klasu

koja

predstavlia

vezu

sa Stampadem

i

koja

dozvoljava

da

imate

santo

iedan

StamPad.

3

2. U datoteci

zaglavlja,

napravite

klasu

Mirror

ko a sadrzi

dva

podatka

dlana:

pokazivad na objekat

klase

Mirror

i dlan

tipa

bool.

Dodaite

i

dva

konstruk-

iora,

podrazumevani

konstruktor

koji

inicijalizuje

logidki

dlan

wednosiu

true,

a

pokazivad

nulom.

Drugi

konstruktor

ima

argument

tipa

Mirror

*,

koji dodeljuje

internom

pokazivaeu, a dlanu

tipa

bool

dodeljuje

wednost

false. Dodajte

funkciju

dlanicu

testo.

Kada

pokazivad

na objekat

nema

wednost

nula onda

waia

wednost

funkciie

test(

)

koja

je

pozvana

preko

pokazivada.

Ako

pokazivad ima

wednost

nula,

na vrednost

dlana

tipa bool.

bada

napravire

per

cpp datoteka

tako

da

svaka

ukljuduie

zaglavlje

klase

Mirror.

Prva cpp

datoteka

deflnise

globalni objekat

klase

Mirror

upotre-

bom

podrazumevanog

konstruktora.

Druga

datoteka

deklarise

objekat

u

prvoj datoteci

kao spoljni

i deflnise

globalni objekat

klase

Mirror

upotle-

Lom-drugog

konstruktora,

s

pokazivaeem

na

prvi

objekat.

Nastavite

ovako

dok

ne

riign"t.

do

poslednje datoteke

koja

ie

takode

sadrZati

definiciju

globalnog

objekta.

U toj

datoteci,

glavni

program

treba

da

pozove funkciju

Iest(

)

i

ispise

rezultat.

Ako

je

rezultat

true,

menjajte

redosled

povezivanja

t

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 171/300

sve

dok

ne

dobijete rezultat

false.

33.

Otklonite

problem

u

veZbi

32

koristeii

prvu tehniku

prikazanu

u

ovoi

knjizi.

34.

Otklonite

problem

u

veZbi

32

koristeii

drugu

tehniku

prikazanu

u

ovoj

knjizi.

35.

Ne

ukljuduiuii

datoteku

zaglavlja,

deklarisite

funkciju

putso iz stan-

dardne

biblioteke

jezika

c.

Pozovite

or,u

funkciju

iz

glavnog

programa.

Reference

su,kao

r

konstantni

pokazivadi

koje,prevodilac

automat

-

ski

dereferencira.

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 172/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 173/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 174/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 175/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 176/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 177/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 178/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 179/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 180/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 181/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 182/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 183/300

Misliti

na

jeziku

C++

356

25

26

NapraviteklasukojasadrTinizcelobrojnihvrednosti.DalimoZetedadode.

liteindeksnebroieveilanovimanizaupotrebompokazivaeanadlanove?

Iz-menite

clatoteku

PmemFunDefinition'cpp

dodavanjem

preklopljene

ftrnkcije

elanice

f(

)

(moZete

da

utwdite

listu

argumenata

toja

Ce

\zazvati

freklapanie).

Sada

napravite

drugi

pokazivai

na

dlan'

dodelite

ga preklo-

i,ii.r"ir.iriri

funkciie

f(

),

i

pozovitl

tunkciiu

preko

tog

pokazivada'

Kako

se

ovde

razre5ava

PreklaPanje?

2

7.

Poinite

s datotekom

FunctionTable'cpp

iz

poglavlja

3'

Napravitetlasu

koia

sadrZivektorpokazivadanafunkcije.I{asatakodetrebadasadrZifunkcije

dlaniceadd()iremove()kojesluZezadodavanjeiuklanjanjepokazivada

na

funkciie.

Dodajte

i funkiiju

run(

)

koia

se

kreie

kroz

vektor

i

redom

poziva

sve

funkciie'

28.IzmenitereSenjevelbe2Ttakodaradispokazivadimanafunkcijedlanice.

l,r

l,:,

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 184/300

iit,

$t.

i-.,

j-.

i ','

it

..

I,

l:

II

t'.

L.

["

i

i".'

i'

i"

;r

I

Ii

t

t.,

l\

,I2:

PREKLAPANJE

oPERAToRA

:'

i

Preklapanje

operatora

je

samo

,,sintaksna

poslastica',

Sto

znadi

da

i

je

to

joS

jedan

nadin zapoz.walje

funkcije.

I

I

I

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 185/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 186/300

362

Misliti

na

jeziku

C++

return

a;

)

I I

Suft

ksna

verzija

vraca

vrednost

pre

umanienia:

const

Integer operator--(lnteger&

a,

int)

(

cout

<<

"

lnteger--\n";

Integer

before(a.i);

a.i--;

return before;

I

//

Pokazacemo da

preklopljeni

operatori

rade:

void

f(lnteger

a)

{

+a;

-o;

-a;

Integer*

ip

=

&a;

la;

++d

i

a++;

Poglavlje

I

2:

Preklapanje

operatora

363

//

Funkcije

dlanice nisu

konstantne, pa

mogu imati

sporedne

efekte:

const

Byte&

operator++0

|

//

pretiksna

verzija

cout

<<

"++Byte\n,,;

b++;

return

*this;

)

const

Byte

operator++(intl

I

l/

Suf.iksna

verzija

cout

<<

"Byte++\n";

Byte

before(b);

b++;

return

before;

)

const

Byte&

operator--0

{

/l

prefiksna

verzija

cout

<<

"--Byte\n";

--b;

return

*thi

s;

)

const

Byte

operator--(int)

I

/l

Sufiksna verzija

cout

<<

"Byte--\n";

Byte before(b);

-

-b;

return

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 187/300

)

//

Funkci3e

clan'ice

(podrazumeva

se argument "this"):

class

Byte

{

unsigned char

b;

publ

i

c:

Byte(unsigned char

bb

=

0)

:

b(bb)

{)

//

Nema

sporednih

efekata:

konstantne

funkciie

ilanice:

const

Byte&

operator+0 const

{

cout

<<

"+Byte\n";

return

*thi

s;

)

const

Byte

operator-0

const

(

cout

<<

"-Byte\n"

I

return Byte(-b);

i

const

Byte operator-0

const

{

cout

<<

"-Byte\n";

return

Byte(-b)

;

i

Byte operator

0

const

{

cout

<<

" Byte\n";

return

Byte

(

b)

;

)

Byte*

operator&0

{

cout

<<

"&Byte\n";

return

thi s;

)

before;

)

);

void

g(Byte

b)

{

+b;

-b;

-b;

BYte*

bP

=

96'

 b;

++b;

b++;

- -b;

b--;

)

int

mainfl

{

Integer

a;

f(a);

Byte

b;

g(b);

\

///:-

,

ove

funkcije

su

grupisane

na

osnovu

nadina

prosledivanja

argumenata.

Kasnije

cemo

navesti

smernice

za

prosledivanje

i waianje

argrr-e.rit".

uglur-

nom

iete

koristiti

tehnike

iz

prethodnog

primera

(kao

i one

koji

iete videti

u

sle-

decem

odeljku).

Neka

vam

one

posluZe

kao sablon

kada preklapate

operatore.

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 188/300

366

Misliti

na

jeziku

C++

//

Uslovni

operatori

vracaiu

vrednosti

true

ili

false:

frr

end

i nt

operator==

(const

I

nteger&

I

eft,

const

Integer&

ri

ght)

;

fri

end

i

nt

operator =(const

Integer&

1eft,

const

Integer&

right);

f

ri

end

'i

nt

operator<(const

Integer&

1eft,

const

Integer&

right);

friend

int

operator>

(const

Integer&

1

eft,

const

Integer&

right);

fri end

i

nt

operaton<=(const

Integer&

left,

const-

Integer&

right)

;

fri

end

I

nt

operator>=

(const

I

nteger&

i

eft,

const

Integer&

right)

;

fri

end

i

nt

operator&&(const

Integer&

1eft,

const

I

nteger&

ri

ght)

;

Poglavlje

I

2:

Preklapanje

operatora

 6V

const

Integer

operator*(const

Integer&

1eft,

const

Integer&

right)

{

return

Integer(1eft.i

*

right.i);

)

const Integer

operator/(const

Integer&

1eft,

const

Integer&

right)

{

require(right.i

=

0,

."deljenje

s

nu1om,,);

return

Integer(1eft.i

/

rlght.i);

)

const

Integer

operator%(const

Integer&

left,

const

Integer&

right)

{

require(right,i

=

0,

"ostatak

pri

deljenju

s

nu1om,,);

return

Integer(1

eft. i

% r1

ght.

i

) ;

i

const

Integer

operator^(const

Integer&

1eft,

const Integer&

right)

(

return

Integer(1eft.i

^

right.i);

)

t

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 189/300

fri

end

i

nt

operatorl

I

(const

Integer&

1eft,

const

Integer&

right);

II

lsptsuje

sadrZaj

u

iz1azni

tok:

void

print(std::ostream& os)

const

{

os

'<

i;

)

);

#endif

ll

INTEGER_H

///:-

I I

: CI?:lnteger.cPP

{0i

I I

Realizaci

ja

preklopl

jenih

operatora

#include

"Integer.h"

#include

". ./require.h"

const

Integer

operator+(const

Integer&

left,

const

Integer&

right)

{

return

Integer(left.i

+

right.i);

)

const

I

nteger

operator-

(const

I

nteger&

I

eft,

const

Integer&

right)

{

return Integer(left.i

-

right.i);

)

const

Integer

operator&(const

Integer&

1eft,

const

Integer&

right)

{

return

Integer(1eft.i

&

right.i);

)

const

Integer

operatorl

(const

Integer&

left,

const

Integer&

rlght)

(

return

Integer(1eft.i

I

right.i);

)

const

Integer

operator<<(const

Integer&

1

eft,

const

Integer&

right)

{

return

Integer(1eft.i

<<

right"i)

;

)

const Integer

operator>>(const

Integer&

1eft,

const

Integer&

right)

{

return

Integer(1eft.i

>>

right.i)

;

]

//

Operatori

dodele

menjaju

i

vracaju

lvrednost:

Integer&

operator+=(lnteger&

1

eft,

const

Integer&

rjght)

{

if(&left

==

&right)

{/*

dodela

vrednosti

istom

objektu

*/)

I

eft.'i

+=

ri

ght.

i

;

return

left;

)

Misliti

na

jeziku

C++

358

I

nteser&

o,erator-=,

::::?.i:,[::i

if(&left

==

&right)

{/*

dodela

left.i

-=

right.i;

return

1

eft;

i

Inteqer&

operator*=(lnteger&

left'

const

lnteger&

i f

(&l

eft

== &ri

ght)

{

/*

dodel

a

I

eft.

i

*=

ri

ght.

i

;

return

1 eft;

ri

qht)

(

vrednosti

i stom

objektu

*/)

ri

sht)

(

vrednosti

i stom

objektu

*/)

I

rnteser&

operator/=,::::?.;:,[:li

.,ni,l

r

require(right.i

l=

0,

"deljenie

s

nulom");

liiar.ri

==

a.isl,t) {7.

ooo.ta

vrednosti

istom

obiektu

*/)

1

eft.

i

/=

ri

ght. i

;

return

1

eft;

)

Inteser&

operator%=,::::?.;:.[:li

.,nn,,,

require(right.i

l= 0,

"ostatak

pri

delieniu

s

nulom");

*/)

Poglavlje

I

2:

Preklapanje

operatora

369

return

I

eft;

)

Integer&

operator<<=

(

integer&

1

eft,

const

I nteger&

ri

ght

)

{

if(&1eft

==

&riSht)

{/*

dodela

vrednosti

istom

obiektu

*/}

I

eft.

i

<<=

ri

ght.

i

;

return 1

eft;

)

//

Uslovni

operatori

i

nt

operator==

(const

const

return

Ieft.i

==

)

i nt operator =

(const

cons

t

return

Ieft.i =

I

i

nt

operator<

(const

I

nteger&

I

eft,

const

Integer&

right)

i

return

left.1

<

right.j;

)

j

nt operator>(const

Integer&

I

eft,

const

Integer&

right)

vracaju

vrednost

true

ili false:

Integer&

left,

Integer&

right)

{

ri

ght.

i

;

Integer&

1eft,

Integer&

right)

{

ri

ght.

j

;

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 190/300

const

I

nteger&

if(&left

==

&right)

{/*

dodela

1eft.i

l=

right.i;

return

1

eft;

ri

ght)

{

vrednosti

i

stom

risht)

{

vrednosti

istom

objektu

*/]

I

riAl.fi ==

f.lsl,t)

{/"

dodela

vrednosti

istom

objektu

I

eft.

i

%=

ri

ght. i

;

return

1 eft;

)

rnteser&

operator^=,:::::.;:,[:li

.,nn,,,

if(&left

==

&right)

{/*

dodela

vrednosti

istom

objektu

"/}

left.i

^=

right'i;

return

I

eft;

)

I

nteger&

operator&=

(

I

nteger&

I

eft

'

const

I

nteger&

i

f(&left

-=

&right)

{/*

dodela

left.i

&=

right'i;

return

I

eft;

)

Integer&

operator]

=(lnteger&

left'

objektu

*/)

)

rnteser&

operator>>=(rllii.ilrlill;

right)

{

if(&left

==

&rjght)

i/*

dodela

vrednosti

istom

objektu

I

eft.

i

>>=

ri

ght. i

;

*

l\

i

return

Ieft.i

>

right.i;

)

i

nt

operator<=

(const

Integer&

1

eft,

const Integer&

right)

{

return

I eft.

i

<=

ri

ght.

i

;

)

j

nt operator>=

(const

Integer&

1

eft,

const

Integer&

rlght)

{

return

left.i

>=

right.i;

)

'int

operator&&(const

Integer&

left,

const

Integer&

right)

{

return

I

eft.

i

&&

ri

ght.

i

;

)

int operatorl

I

(const

Integer&

1eft,

const

Integer&

right)

{

return left.i

ll

right.i;

)

//

/,-

/

I

z CLZIIntegerTest.cpp

//{

L}

Inteser

#include "lnteger.h"

#i ncl

ude

<fstream>

using

namespace std;

ofstream

out("lntegerTest.out")

;

t70

Misliti

na

jeziku

C++

void

h(lnteqer&

c1,

lnteger&

c2)

{

//

S1 oZen

i

zraz:

cI+=cl*c2+c2%cl;

#defr

ne

TRY

(0P)

\

out

<<,,C1

=,,;

cl.print(OUt);

\

out

<<

"

,

cZ

=

";

c2.Print(out);

\

out

<<

"; c1

"

#OP

"

c2

daie

";

\

(ct

0P

c2).Print(out);

\

out

<<

endl;

TRY(+)

TRY(-)

TRY(.)

TRY(/)

TRY

(%)

TRY

(^)

TRY

(&)

TRY

(

|

)

TRY(<<)

TRY(>,)

IRY(+=)

TRY(-=)

TRY(*=)

rRY(/=)

TRY(%=)

TRY(^=)

TRy(&=)

TRY(

|

=)

TRY(>>=)

TRY(<<=)

//

Uslovni

oPeratorj:

#define

TRYC(0P)

\

out

<<

,,c1

=

',;

cl.print(out);

\

out

<<

,,

,

cZ

=

"; c2.print(out);

\

out

<<

";

c1

"

#0P

" c2

daie

";

\

oul

<< (c1

0P

c2);

\

out

<<

endl;

TRYC(<)

TRYC(>)

TRYc(==)

TRYc(

l=)

rRYC(<=)

Poglavlje

I

2:

Preklapanje

operatora

371

const

Byte

operator-(const

Byte&

right)

const

{

return

Byte(b

-

ri

ght.

b)

;

)

const

Byte

operator*(const

Byte&

right)

const

{

return

Byte(b

*

right.b);

i

const

Byte

operator/(const

Byte&

right)

const

{

require(right.b

l=

0,

,,deljenje

s

nulom");

return

Byte(b

/

right.b);

)

const

Byte

operator%(const

Byte&

right)

const

{

require(right.b

l=

0,

,,ostatak

pri

deljenju

s nu1om,,);

return

Byte(b

%

right.b);

)

const

Byte

operator.'(const

Byte&

right)

const

{

return

Byte(b

^

rjght.b);

)

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 191/300

TRYC(>=)

TRYC(&&)

rRYC(

I

I

)

)

int

majn0

{

cout

<<

"funkcije

priiatelJi

"

"

endl;

Integer

cl(a7),

c2(9);

h(c1,

c2);

\

I

ll,-

I

I

: C12:

Byte.

h

I

I

Preklopljeni

operatori

ilanovi

#

i

fndef

BYTE_H

#defi

ne

BYTE_H

#include

". ./requrre.h"

#i

ncl ude

<i

ostream>

//

Funkcije

alanice

(podrazumeva se arqument

"this"):

class

Byte

{

uns

i

gned

char

b;

publ

i c:

Byte(unsigned

char

bb =

0)

:

b(bb)

{}

//

Nema sporedni

h

efekata:

konstantne

funkci

j

e

dl ani

ce:

const

Byte

operator+

(const

Byte&

ri

ght)

const

{

return

BYte(b

+

right.b);

)

const

Byte

operator&(const

Byte&

right)

const

{

return

Byte(b

& right.b);

)

const

Byte

operatorl

(const

Byte&

right)

const

i

return

Byte(b

I

right"b);

)

const

Byte

operator<<(const

Byte&

right)

const

{

return

Byte(b

<<

right.b);

)

const

Byte

operator>>(const

Byte&

right)

const

{

return

Byte(b

>>

right.b);

)

//

0peratori

dodele

menjaju

i vraeaju

lvrednost.

ff

operator

dodele

moZe

biti

samo

funkcija

dlanica:

Byte&

operator=(const

Byte&

r.ight)

i

//

Proveravamo

dodeljivanje

vrednosti

istom

objektu:

if(this

==

&riSht)

return

*th.is;

b

=

right.b;

return

*thi

s;

)

Misliti

na

jeziku

C++

372

Byte&

operatop+=

(6onst Byte&

ri

ght)

(

"',ii,iis

==

&righl)

{/.

dodela

vrednosti

istom

objektu

*/}

b

+=

rioht.b;

return

"thi

s

i

S\ie-\

Lrperator-=(const

Byte&

rrght)

1

if(this

==

&risht)

i/.

dodela

vrednosti

istom

objektu

*/)

b

-=

ri

ght. b;

return

*thi

s;

)

Byte&

operato,'"=

(const

Byte&

ri

ght)

{

if(th;s

==

&right)

{/*

dodela

vrednosti

istom

obiektu

*/}

b

-=

right.b;

return

-this;

i

Byte&

operatorl=

(const

Byte&

ri

ght)

{

require(right.b

l=

0,

"delienie

s

nu1om");

rf(this

==

&rrght)

i/*

dodela

vrednosti

istom

objektu

*/)

b

/=

right.b;

return

*thi

s;

)

Byte&

operatop2=

(const

Byte&

ri

ght)

{

l=

0,

"ostatak

pri

delieniu

s

nulom")

i

Poglavlje

I

2:

Preklapanje

operatora

373

Byte&

operator<<=(const

Byte&

right)

{

if(this

==

&right)

{/*

dodela vrednosti

istom

objektu

*/)

b

<<=

right.b.

return

*thi

s;

)

//

Uslovni

operatori

vracaju

vrednost

true

ili

false:

int

operator==(const

Byte&

right)

const

{

return

b

==

right.b;

)

int

operator =(const

Byte& right)

const

{

return

b

= right.b;

)

int

operator<(const

Byte& right)

const

{

return

b

<

right.b;

)

int operator>(const

Byte&

right) const

{

return b

>

right.b;

)

int operator<=(const

Byte&

right) const

{

return

b

<=

right.b;

)

int

operator>=(const

Byte&

r'ight)

const

{

return

b

>=

right.b;

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 192/300

require(right.b

ifitnis

==

&right)

{/*

dodela

vrednosti

istom

objektu

*/)

b

%=

right.b;

return

*thi

s;

I

Byte&

operatop^=

(const

Byte&

ri

ght)

(

if(thjs

==

&right)

{/*

dodela

vrednosti

istom

obiektu

b

^=

rj

ght.

b;

return

*thi

s;

)

Byte&

operatopg=

(const

Byte&

ri

ght)

(

if(thls

==

&right)

{/*

dodela

vrednosti

istom

obiektu

b &=

right.b;

return

*thi

s;

l

Byte&

operator]=(const

Byte&

right)

{

if(this

==

&riSht)

(/-

dodela

vrednosti

istom

objektu

b

l=

right.b;

return

*thi

s;

)

Byte&

operatop>>=(const

Byte&

right)

{

if(this

==

&right)

{/*

dodela

vrednosti

istom

objektu

b

>>=

ri

ght

.

b'

return

*thi

s;

I

-

ll

-

ll

-

ll

*

lJ

)

int operator&&(const

Byte& right)

const

(

return b &&

right.b;

)

int operatorl

|

(const

Byte&

right) const

(

return

b

ll

right.b;

)

//

Ispisuje

sadrZai

u

jzlazni

tok:

void

print(std::ostream& os) const

{

os

<<

"0x"

<<

std::hex

<<

int(b)

<<

std::dec;

)

);

#endit

/l

B\TE_H

///:-

//:

Cl?tBytelest.cpp

#include

"Byte.h"

#i ncl ude

<fstream>

using

namespace

std;

ofstream out

("ByteTest.out"

)

;

void

k(Byte& bl,

Byte&

b2)

(

b1=bl*b2+b2%bll

#define

TRY2(0P)

\

out

<<,,b1

=,,;

bl.print(out);

\

out

<<

",

b2

= '';

b2.Print(out)

I

\

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 193/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 194/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 195/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 196/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 197/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 198/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 199/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 200/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 201/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 202/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 203/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 204/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 205/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 206/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 207/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 208/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 209/300

ll

I

i:

'

i

i,'

\..

\';.

l

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 210/300

l'r

..-

1"r..

t

1(i

;

lf.:

t.\

'

I

ri.

t-

I\I

L'

lt

i-

i'

{

ir

E:

I

Drrunrtnero

STvARANJE

OBJEKATA

Nekad tadno znate

kolidinu, tip

i

rok trajanja

objekata

u

svom

pro-

gramu.

Ali

ne

uvek...

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 211/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 212/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 213/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 214/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 215/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 216/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 217/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 218/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 219/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 220/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 221/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 222/300

434

Misliti

na

jeziku

C++

l4

Napravite

klasu

sa

namenskim oparatorom new,

diji

ie

argument

tipa

,tri.rg.

Klasa

bi

trebalo

da sadrZi

static

vector<string>,

gde se smesta

drugi

argument

operatora

new.

U

funkciii

main(

)

pozovite

namenski

operator

new

sa argumentima

koii

opisuiu

taj

poziv

(mogli

biste

da

iskoristite

pret-

procesorske

makroe

FIt-E

iLINE)'

Prc racii

t

e

progra ltt ArrayOperatorNew.cpp

dodavani

em

stati'kog

vektora,

pokaz.ivaia

tipa

widge*.

operator

new

treba

da

u tai

vektor

upise

adresu

irovog

objekti,

u

,',p.rutnI.

delete

treba

da

obrise

adresu

obiekta

iz vektora

(vise

informacija

o

vektorima

potraZite

u

dokumentaciji

biblioteke

ili

u

clrugom

tomtr

knjige).

Napravite

i

drugu klasu

MemoryChecker,

iiji

desii.ktor

prikazuje broi

pokazivada

u

vektoru.

Napravite

program

sajed-

norn

globainom

instancom

klase

MemoryChecker

i u

funkciji

maing,

dinariiaki

napravite

i uni5tite

nekoliko

objekata

i

nizova

tipa

widget.

PokaT-ite

cla MemoryChecker

otkriva

curenje

memorije'

t5

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 223/300

I 4=

NnsLrDlVANle,'l

SLAGANJE

Pono\mo

koriScenje

kod3

je

jedna

od

najnapredni.lih rnoguinosri

C++-a,

ali

ako zaista Zelite

da

postanete

programer,

moriiete da

naudite

mnogo

vi5e

od

jednostivnog

kopiianja i menjanja.

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 224/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 225/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 226/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 227/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 228/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 229/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 230/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 231/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 232/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 233/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 234/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 235/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 236/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 237/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 238/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 239/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 240/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 241/300

Misliti

na

jeziku

C++

468

ltrnkcijeilarriccklaselProrytrebasamodapozivajuodgovarajuiefunkcije

prekopokazivaCanaklasu'subiect.ArgumentkonstruktorazaklasuProxy

1rokaz.i,,ai,

je

na

klastr

Subiect,

koji

se

ugraduje

u

objekat.

klase

Prory

iobicno

r.r konstftrktor).

U

{'unkci;i

maino

napravite

dva

razlidita

obiekta

tipa

Proxy,

ktljiktlristc

clve

raz-lidite

realizacije.

Zal\m,

izmenite

klasu

Prory

tako

da

tttoZete

dinanlicki

menjati

realizaciie'

2 8.

lzrnenite

program

ArrayoperatorNew'cpp

iz

poglavlja

I3 da

biste

pokazali

--

tofo,

u1.,rlos'nasleaivanlu,

dodela

idalJe

ispramo

funkcioni5e-

Objasnite

za5to

rrasleclivatlje

tt

prog.urn,

Framis'cpp

iz

poglavlja

13

ne

bi

funkcio-

nisalo.

29.

lzn'renite program

Framis'cpp

iz

poglavlja

I3'

izvodeniem klase

iz

klase

Framis

u

koioi

iete

napraviti

nove

veizije

operatora

new

i delete.

Pokazite

da

nova

klasa

radi

isPravno'

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 242/300

I

5:

PoIIMORFIZAM I

VIRTUELNE

FUN.KCUE

,

,

Polimorfizam

je,

pored

ap.gtrakcija,lpodataka

i

nasledivanja, treie

osnovno

svoi

stvo

obj

ektno

orijentisanih

p

ro

gramskih

j

ezika.

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 243/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 244/300

474

Misliti

na

leziku

C++

ProS

irivost

Poiro

je

frrnkcija

play(

)

rr

osnovnoj

klasi clcfinisana

kao

virtuelna,

moZete doda'

vatt

koliko

gorl

hoictc

por,ilt

tiltgva

nc

rnenjajtlii

ftrnkciju

tuneO.

tJ dobro

pro-

jcktovanonr

ob

jcktrto

orijt rrtisanrrrn

prograrnu,

rnoclel

veiine

ftrnkciia biie

nalik

lra tune(

)

i konrrrnicirait:

sarno

sa intcrfejsonl

osnovnc

klase.

Takav

program

je

proiirit',1toSto

sistctttu rnoZcte

clodavati

ftrnkcir:nalnost

izvodeii

nove tipove

podataka iz zajcclnicke

osnovrre

klase.

Irrrnkcije

koie

rade

s

interfejsom

osnol'ne

klase rrol.ritc

ne

lrorate

nreniati da

bi se

pritagodile novim klasama.

Prethoclnont

printenr

str clocleite

virtuelne

lunkcije

i nove klase

i

sve

ispravno

racic sa staron-I,

treprontcnjenorn

funkcijom

tune(

):

I

I

:

C15:

Instrument4.cPP

I

I

Pro\i rivost u 00P-u

{i ncl ude

<i

ostream>

us

i

ng namespace s td

;

enurf

note

{

mi

dd1

eC, Csharp,

Cfl

at

}

;

I I

ltd

"

class

Instrument

i

publ

i

c:

virtual

void

play(note)

const

{

cout

<<

" I nstrument:

:

P1

aY"

<<

endl

;

)

vr

rtual

char*

what

0

const

{

return

"

Instrument"

I

)

//

Pretpostavimo da ce ova

funkcija

izmenit'i objekat:

virtual vord

adjust(int)

{}

);

class

tiind

:

public

Instrument

{

Poglavlje

I

5:

Polimorfizam

i

virtuelne

funkcije

475

voi

d

p1

ay

(

note)

const

{

cout

<<

"Stri

nged:

: p1

ay"

<<

endl

.

)

char*

what0

const

{

return

"Stri

nged";

}

void

adjust(int)

()

);

class Brass

:

public

Wind

i

publ

i

c:

void

play(note)

const

{

cout

<<

"Brass:

:

p1

ay"

<<

endl

.

)

char*

what0

const

{

return

"Brass";

}

l.

cl ass Woodwi

nd :

publ

i

c

l,li nd

{

publ

i c:

void

play(note)

const

{

cout

<<

"Woodwi

nd:

:

pi

ay"

<<

endl

.

)

char*

what0

const

{

return

"Woodwind";

)

I.

//

Istovetna

funkcija

kao

ranije:

void

tune(lnstrument&

i)

(

i.p1ay(middleC);

I

/

/

Nova funkcija:

void

f(lnstrument&

i)

{

i.adjust(1);

}

t

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 245/300

publ

r

c:

vord

play(note) const

{

cout

<<

"l^/ind: :

pl

ay"

..

endl

'

)

char*

what

0

const

{

return "14i

nd"

r

}

vord

adjusl(int)

{ )

);

class

Percussion

:

public

Instrument

i

p-01

c:

voi

d

p1

ay

(note)

const

{

cout

<<

"Percussi on:

:

p1

ay"

<.

endl

;

)

char*

what0

const

(

return

"Percussion

void

adjust(rnt)

{ )

t;

cl

ass Stri

nged

:

publ

i

c

Instrument

{

publ i

c:

;i

//

Svodenje

navi5e

tokom

inicijalizacije

niza:

Instrument*

Atl

=

{

new l,ii nd,

new

Percussion,

new

Stri nged,

new

Brass,

);

int

main0

{

Wi nd

fl

ute;

Percussi

on

drum;

Stri nged vi

ol i n;

Brass fl

ugel horn;

Woodwi

nd

recorder;

tune(flute);

tune

(drum)

;

tune

(vi

ol

j

n)

;

tune

(fl

ugel horn)

;

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 246/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 247/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 248/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 249/300

484

Misliti

na

jeziku

C++

Za

deklarisanic

potpuno

virtuelne

funkciie

koristi

se

sintaksa:

r0

0;

In

stru

ment

virtual

void

PlaY0

virtual

char*

whato

virtual

void

adjustQ

Percussion

void

plaYo

charx

what(

)

void

adjusto

void

Playo

ch

ar*

what(

)

void

adjust0

void

plaY(

)

charx

what0

void

adjusto

Woodwind

void

plaY(

)

char*

whato

oid

playo

charx

whato

Poglavlje

l5: Polimorfizam

i virtuelne

funkcije

485

class

Instrument

(

publ i

c:

/l

Potpuno virtuelne

funkcije:

virtual

vojd

play(note)

const =

0;

vjrtual char*

what0

const =

0;

//

Pretpostavlja se

da ce ova

funkcija

menjati objekat:

virtual

vojd

adjust(int)

= 0;

t.

//

0statak

datoteke

ie

isti

...

class

Wind

:

public

Instrument

{

public:

void

play(note)

const

{

cout

<<

"l,Ji

nd:

:

p'l

ay"

<<

endl

'

)

char*

what

0

const

{

return "l,Ji

nd''

; }

void

adjust(int)

()

);

class

Percussion

:

public

Instrument

{

publ

i

c:

void play(note) const

{

cout

<<

"Percussion:

:p1ay"

)

char*

what0

const

{

return

void adjust(int)

{}

);

class Stringed

:

public

Instrument

{

publ

i

c:

void

play(note)

const

{

<<

endl;

''Percussion";

)

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 250/300

virtual

uo,6

=

NaovainacirrsaopStavateprevodiocr'rda'rezerviseredzafunkcijuutabeli

\.1A81.1,,

ali

da

u

toi

,...f

n.

.r.itu

ua..ru.

eak

i

ako

je

samo

iedna

funkciia

klase

cleklarisana

kao

potpuno

virtuelna'

tabelaWABLE

niie

kompletna'

Sta

prevodilac

treba;"

;;i

ako

neko

poku5a

di

napravi

obiekat

klase

iija

tabela

VlAIlt-L

nijc

kompletna?

Po5to

ne

m.oZe

bezbedno

napraviti

obiekat

apstraktne

klase,

priiavll,i"

g'"st"'

Na

taj

natin

prevodilac

sprovodi

apstraktne

klase.Pravljenlemapstraktntkiu"spredavateprogrameraklilentadaiepogre-

5no

r-rpotrebi.

il

program

Instrument4'cpp

dodate

su

potpuno

virtuelne

funkciie'

Po5to

klasa itrra

.o*n

pn,1.,,,no

ui'ti'elne

funkciie'

nazivamo

ie

potpuno

apstraktna

l,1a.sn

(errgl. pttre

altstract

clctss\"

I

l:

C15:

Instrument5'cPP

//

Potpuno

apstraktne

osnovne

kl ase

#include

<iostream>

us

i

ng

names

Pace

s

td;

enum

note

{

middleC'

Csharp'

Cflat

};

ll

ltd'

cout

<<

"Stri

nged:

: p1

ay"

)

char*

what0

const

{

return

void adjust(int)

{}

I.

cl ass Brass

:

publ

i

c l"l'i

nd

{

publ

i

c:

void

play(note)

const

{

cout

<<

"Brass:

:

p1

ay"

<<

endl

'

)

char*

what0

const

{

return

"Brass";

}

);

class

Woodwi

nd

:

publ

i

c

l,,li nd

{

publ

i

c:

void

play(note)

const

{

cout

<<

"l,,/oodw'ind::P1aY"

..

endl;

<<

endl

;

"Stri

nged";

)

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 251/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 252/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 253/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 254/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 255/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 256/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 257/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 258/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 259/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 260/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 261/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 262/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 263/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 264/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 265/300

llii.

,,

.

.., ,

,

.fi

,,

;

.

..1...,::r;

::.

r,

..

,:

.

;

:,

.

l6:

Uvo-b

"u,SABtoue

Naslddivanj

e

i'

slaganj

e

omo

guiavaju

po

no\rno

ko

ri5ienj

e

obj ekt

-

nog

koda.

Sabloni

ujeziku

C**

o*oguiavaju

ponovno

lioriiienje

izuornogkoda.

I

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 266/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 267/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 268/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 269/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 270/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 271/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 272/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 273/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 274/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 275/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 276/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 277/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 278/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 279/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 280/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 281/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 282/300

5so

Misliti

na

jeziku

C++

i

ndex

=

rv.

i ndex

i

return

*thi

s

l

)

r teralor&

operator++

(

)

{

requl

rg(++1ndex

.=

PS.next,

'PSlash:

:

I

terdtor:

:operator++

"

"tndeks

rzvan

grantca")

;

return

*thr

s;

)

r

terator&

oPerator++

(

i nt)

{

return

oPerator++0 ;

)

i

terator&

oPerator--

0

(

requ'i

re

(-

-'i

ndex

>=

0,

"PStash:

:iterator:

:oPerator--

"

"

i

ndeks

1

zvan

grani

ca"

)

;

return

*thi

s;

)

iterator&

oPerator--(int) {

return

operator--

0

;

)

,17'

Premeitanje

lteratora

unapred

ili unazad:

i

terator&

operator+=

(

i

nt

amount)

i

requjre(index

+

amount

<

ps.next

&&

index

+

amount

>=

0,

'

PStash:

:

i

terator:

:

oPerator+=

"

'i

ndeks

i

zvan

grani

ca"

)

;

index

+=

amount;

return

*thi

s;

I

rterator&

operator-=(int

amount)

{

requi

re

(

i ndex

- amount

<

ps.

next &&

rndex

-

amount

>=

0,

"PStash: :

i

terator:

:oPerator-=

"

"indeks

izvan

granica")

;

i ndex

-=

amount;

Poglavlje

I6:

Uvod u

Sablone

551

T*

operator*0

const

(

return

current0;

)

T'

operator->0

const

i

require(ps.storageIindex] =

0,

"PStash:

:iterator:

:operator-> vraca

0")

I

return

current

0 ;

Uklanjanje

tekuceg

elementa:

remove

(

)

{

return

ps.

remove(i

ndex)

;

)

//

Uporedivanjem

se ispituje

da

li

je

kraj:

bool

operator==(const

iterator&

rv)

const

{

return

index

==

rv.index;

)

bool

operatort=(const

iterator&

rv)

const

{

return

index

=

rv.index;

)

);

iterator begin0

{

return

itenator(*this);

}

i

terator

end

0

(

return

i terator(*thi

s,

true)

;

)

I.

//

Uni

5tavanje objekata

kontejnera:

templ

ate<c1

ass T,

i

nt

i ncr>

PStashcT,

incr>::-PStash0

{

for(int i

= 0;

j

<

next;

i++)

{

delete

storageltl;

I I

Prazni

pokazivadi

su

u

redu

storageIi]

= 0;

ll

Samo radi

bezbednostj

)

de1

ete

[]

storage;

)

templ

ate<c'1

ass

T,

'i

nt

i

ncr>

int PStash<T,

incr>::add(T*

element)

{

if(next

>=

quantity)

inf1ate0;

)

T*

t-

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 283/300

return

*thi

s;

l

//

Pravj se

nov

iterator

kojl

se

pomera unapred

i terator

operator+

(

i

nt

amount

)

const

{

i

terator

ret

(*thi

s)

;

ret

+-

amount;

//

operator

+=

proverava

granice

return

ret

i

l

l*

current

(

)

const

{

return

ps.

storageIindex] ;

I

storage[next++]

=

element;

return(next

- t);

//

Broj

indeksa

)

templ

ate<c1

ass T,

i

nt

i

ncr>

i nl i ne

T*

PStash<T,

incr>::operator[]

(int

index)

const

{

require(index

>=

0,

"PStash::operator[]

indeks

je

negativan,')

;

i

f(index

>=

next)

return

0;

l/

Da

ukaie da

je

kraj

require(storageIindex]

= 0,

"PStash:

:operator[]

vratio

prazan pokazivac");

return

storage[index]

;

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 284/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 285/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 286/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 287/300

Misliti

na

jeziku

C++

560

I

7.

'rerrroritc

klas.

Int

iz-

programa

TPStash2Test.cpp

u

Sablon,

tako

da

sadrzi

bilo koii

tip

objekta

tsioUoAno

klasi

dodelite

ime

koie

joi

vi5e

odgovara)'

I

g. prctvoritc

klasu

IntArray

iz

programa

Iostreamoperatoroverloading'cpp

(poglavlie

I2),

tako

Jn

pu'nt"iti

budu

tip

sadrTanog

obiekta

ivelidina

internog

niz-a.

'I

9.

I)rctvorite

klasrr

obicontainer

tr

programu

NestedSmartPointer'cpp

(pog-

lavlje

l2)

tr

iablon,-festirajte

ie

pomoiu

dve

razlidite

klase'

2

0.

Izrrtcrtitc

ClS:OStack.h

i ClS:OStackTest'cpp

pretvaranjem

klase

Stack

u

Sablon,takodaatrtomatskivi5estrukonasledujeparametarsktt'klasui

klasu

Obiect.

Dobijena

klasa

Stack

treba

da

prihvata

i

proizvodi

samo

pokazivaic

sadrTanog

tiPa'

2l.Ponovorrraditcz,adatak20koristeiiklasuvectorumestok]aseStack.

22.

Izveclite

klasu

Stringvector

iz

klase

vectorcvoid*>

i redefinisite

funkciie

--

;1";i..

push-backi)

i operatorll

tako

da

prihvataiu

i.proizvode

samo

pokaz-ivade

tipa

string*

(izvr5ite

odgovaraiuiu

konverziiu)'

Zatim

napra-

vite

iablon

tnnt.ln.rikoii

isto

tn

'idi

automatski

zapokaziva(e

bilo

kog

tipa.Ovatehnikasecestokoristidabiseumanjilonarastaniekodausled

pievelikog

broja

instanciranja

Sablona'

23.

tJ

TPStash2.h

dodajte

operator

-

klasi

PStash::iterator

itestirajte

ga,

po

uzortl

na

operator

+'

24.

t)

Drawing.cpp

cloclajtt'itestirajtc

Sablon

funkciie

za

pozivanje funkcija

ilanica

erase(

).

25.

{Napredno)

Izmenite

klasu

Stack

u

Tstackz'h

tako

da

se

vlasniStvo

oclredtr

jc

,.n

na1nlanj"

jeclinice: svakoj

vezi

dodajte

indikator

koji

ukazuie

na

to

(la

ti

u"ru

p,,J"jtrie

objekat

na

koii

pokazuje

i

koristite

ovu

infor-

n.raciiu

tr

irrnkciii

p,,snt

)

i u

destruktoru'

Dodajte

funkcije

dlanice

za

ditanie

i izmentr

vlasniStva

svake

veze'

26.

(Napreclno)

Izmenite

PointerToMemberoperator.cpp

iz

poglavlja

12'

pret-

varanjerrlklaseFunctionobiectioperatora->*uSablonezaradsbilokojim

tipom

rezultata.

Za

operator

->*

iete

morati

da

koristite iablone

ilanoua

(engl.

nternlter

templ'ates),

opisane

u

drugom

tomul.

Dodajte,i,testiraite

podrsktr

za

nula,

leian

i

d'u uig'*et'ta

u

funkciiama

dlanicama

klase

Dog'

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 288/300

A:

STII

PISANJA

PROGRAMA

Ovo

nije dodatak

o

uvladenju

koda

i

kori5ienju zagrada

i

vitidastih

zagrada,

mada ie i

to biti

spomenuto. Navode

se

opSLe smernice,

kori5iene

za organizovanje teksta programa u ovoi

knjizi.

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 289/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 290/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 291/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 292/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 293/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 294/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 295/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 296/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 297/300

",

'

.

*;i,

,,.,;i_,,.

.

.l

,':'r

\.r:

iar

rf.

':t:,

t

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 298/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 299/300

8/21/2019 Misliti na jeziku C++

http://slidepdf.com/reader/full/misliti-na-jeziku-c 300/300