Top Banner

of 13

Slide o2 Prosirenja c

Jul 06, 2018

Download

Documents

Dijana30
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 8/17/2019 Slide o2 Prosirenja c

    1/13

    Objektno orijentisanoprogramiranje 1

    Neobjektna prošir jezika C

    1 4. 10 .2 00 5. Pr oš ir en ja j ez ik a C , I go r T ar tal ja2

    Deklaracije i definicije

     Deklaracija je iskaz koji samo uo!i neko ime u program Ime se mo"e koristiti samo ako je pret#o!no !eklarisano $eklara%ija goori preo!io%u kojoj jezi&koj kategoriji neko ime pripa!a  Definicija je ona !eklara%ija koja

     ' kreira objekat (alo%ira memorijski prostor za njega), ' nao!i telo *unk%ije, ili ' u potpunosti nao!i strukturu tipa (o!nosno klase u C++)

    programu mo"e postojati samo je!na !e*ini%ija je!nog objekta,*unk%ije i tipa, a proizoljno mnogo !eklara%ija

    Na jeziku C !e*ini%ije objekata mogu biti samo na po&etku bloka,a nji#oa oblast a"enja je !o kraja bloka

    Na jeziku C++ !e*ini%ija objekta je nare!ba,pa se mo"e na-i bilo g!e u programu

    bjekat mo"e biti ini%ijalizoan u !e*ini%iji

    1 4. 10 .2 00 5. Pr oš ire nj a j ezik a C , I go r T ar ta lj a3

    Objekti

    bjekat je nešto (u memoriji) što ima stanje, ponašanje i i!entitet /unk%ija je u memoriji, ali nije objekat (nema stanje) bjekat u širem smislu

     ' !e*inisano po!ru&je u memoriji, u toku izršaanja programa ' primerak proizoljnog tipa (ugraenog ili klase)

    bjekat u u"em smislu ' primerak (instan%a) konkretnog korisni&kog tipa (klase)

    Promenljia ' objekat koji nije konstantan

    Promenljia mo"e biti ' globalna ili lokalna, ' stati&ka, automatska, !inami&ka, tranzijentna (priremena)

    1 4. 10. 20 05 . Pr oš ir en ja j ezi ka C , Ig or T ar ta lj a4

    Lvrednosti

    lvrednost (lvalue) je izraz koji upu-uje na objekat ili *unk%iju lvalue je koani%a o!

    nešto što mo"e !a stoji sa lee strane znaka !o!ele re!nosti 3a lee strane znaka mogu !a stoje samo promenljie lre!osti Promenljia lre!nost (modifiable lvalue) je ona lre!nost,

    koja nije ime *unk%ije, ime niza, ni konstantni objekat a saki operator se !e*iniše !a li za#tea kao operan! lre!nost i

    !a li ra-a lre!nost kao rezultat peratori &iji operan!i moraju !a bu!u lre!nosti

    unarni &, ++ i --, kao i lei operan!i si# operatora !o!ele peratori &iji su rezultati lre!nosti

    *,[], pre*iksni ++ i --, kao i operatori !o!ele

  • 8/17/2019 Slide o2 Prosirenja c

    2/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, I go r T ar ta lj a5

    Primeri lvrednosti

    int i=0; // i je lvrednostint *p=&i; // p je lvrednost

    *p=7; // *p je lvrednost

    int *q[100];

    q[10]=&i; // q[10] je lvrednost*q[10]=1; // *q[10] je lvrednost

    q=&i; // ! GRES" i#e ni$% nije pro#enljiv% lvrednost

    int %=1'=()=;%=',=); // %=', je lvrednost

    %+',=); // ! GRES"%+', nije lvrednost

    ++ ++i; // ++++i,

    i++ ++; // ! GRES" postinre#ent ne d%je lvrednost

    lon. =; int =0$=0;

    2"$,=1; // 2=1"$=1;

    210"$,=(; // !GRES" 10 nije lvrednost

    1 4. 10 .2 00 5. Pr oš ir en ja j ezik a C , Ig or T ar ta lj a6

    Oblast važenja doseg!

    blast a"enja (!oseg, scope) imena ' onaj !eo teksta programa u kome se !eklarisano ime mo"e koristiti

    6lobalna imena ' imena koja se !eklarišu an si# *unk%ija i klasa ' oblast a"enja !eo teksta o! mesta !eklara%ije !o kraja !atoteke

    7okalna imena ' imena !eklarisana unutar bloka, uklju&uju-i i blok tela *unk%ije

     ' oblast a"enja o! mesta !eklarisanja, !o zaršetka !oti&nog bloka 3akrianje imena

     ' ako se re!e*iniše u unutrašnjem bloku,ime iz spoljašnjeg bloka je sakrieno !o izlaska iz unutrašnjeg

    Pristup sakrienom globalnom imenu ' naoenjem operatora ispre! imena

    Pristup sakrienom sakrienom imenu spoljašnjeg bloka nije mogu-

    1 4. 10 .2 005 . Pr oši re nj a j ez ik a C, Ig or Ta rta lj a"

    Primer dosega i sakrivanja

    int =0; // .lo'%lno void 3 , 4int = // lo%lno .lo'%lno ;

    =; // lo%lno s%riv% .lo'%lno =1; // prist5p lo%lno# ""=; // prist5p .lo'%lno# 4int ; // lo%lno s%riv% pret6odno =(; // prist5p dr5.o# lo%lno#

    =; // prist5p prvo# lo%lno#

    int *p=&; // 5$i#%nje %drese .lo'%lno.

    1 4. 10. 20 05 . Pr oš ire nj a j ezi ka C , Ig or T ar ta lj a#

    $eki specifi%ni dose&i

    nare!bi 3or umesto izraz0 u jeziku C, ujeziku C++ nalazi se nare!ba ' mo"e !a bu!e !e*ini%ija promenljie

    Po stan!ar!u, promenljia !e*inisana na taj na&in (broja& petlje) jelokalna promenljia 3or nare!be

    Neki preo!io%i (npr. 83 9C++) taku promenljiu smatraju !e*inisanomza blok u kome se nalazi 3or

    uslou i3 se mo"e !e*inisati %elobrojna ili pokazia&ka promenljia ' !oseg je !o kraja t#en, o!nosno else bloka

    i3 int =i+j,48else48

    /ormalni argumenti *unk%ije ' lokalne promenljie !eklarisane u bloku tela *unk%ije

    void 3 int ,4int ; // ! GRES

  • 8/17/2019 Slide o2 Prosirenja c

    3/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, I go r T ar ta lj a'

    Primer dosega broja%a petlje for

    for int i=0; i910; i++, 4if %[i]==, break;//:::

    if i==10, //! GRES po st%nd%rd5,// 5 S ; i?=0; i--, )o5t99%[i];

    // 5 S

  • 8/17/2019 Slide o2 Prosirenja c

    4/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, I go r T ar ta lj a13

    +rste objekata po životnom vek)

    Po "iotnom eku, objekti se !ele na ' stati&ke

     ' automatske

     ' !inami&ke

     ' tranzijentne (priremene) 9ek atributa klase ek objekta kojem pripa!aju

    9ek *ormalnog argumenta ek automatskog objekta ' ini%ijalizuju se re!nostima starni# argumenata

     ' semantika ista kao ko! ini%ijaliza%ije objekta u !e*ini%iji

    1 4. 10 .20 05. Pr oši re nj a je zik a C , I go r T ar ta lj a14

    ,tati%ki i a)tomatski objekti

     Automatski objekat je lokalni objekat koji nije !eklarisan kao stati% ' "iotni ek o! njegoe !e*ini%ije, !o napuštanja oblasti a"enja ' kreira se iznoa pri sakom poziu bloka u kome je !eklarisan ' prostor za automatske objekte se alo%ira na stack ;u

    Statički objekat je globalni objekat ili lokalni !eklarisan kao stati% ' "iotni ek o! izršaanja !e*ini%ije !o kraja izršaanja programa ' globalni stati&ki objekti

    kreiraju se samo je!nom, na po&etku izršaanja programa kreiraju se pre koriš-enja bilo koje *unk%ije ili objekta iz istog *ajla nije obaezno !a se kreiraju pre pozia *unk%ije #%in, prestaju !a "ie po zaršetku *unk%ije #%in,

     ' lokalni stati&ki objekti po&inju !a "ie pri prom nailasku toka programa na nji#ou !e*ini%iju

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, I go r T ar ta lj a15

    Primer 

    int %=1;void 3, 4int '=1; // ini)ij%li$5je se pri sv%o# po$iv5static int )=1; // ini)ij%li$5je se s%#o jedno#)o5t99C%=C99%++99C '=C99'++99C )=C99)++99endl;

    void #%in, 4 while %9, 3,;

    i$l%$"% = 1 ' = 1 ) = 1% = ( ' = 1 ) = (

    14. 10 .2005. Pr oš ir enj a j ez ik a C, Igor Tar talj a16

    Dinami%ki i privremeni objekti

    Dinamički objekti se kreiraju i uništaaju posebnim opera%ijama ' "iotni ek !inami&ki# objekata neposre!no kontroliše programer  ' oni se kreiraju operatorom neD, a uki!aju operatorom delete

     ' prostor za !inami&ke objekte se alo%ira na heap;u

    Privremeni objekti se kreiraju pri izra&unaanju izraza ' "iotni ek priremeni# objekata je kratak i ne!e*inisan ' priremeni objekti slu"e za

    o!laganje meurezultata priremeno smeštanje ra-ene re!nosti *unk%ije

     ' naj&eš-e se uništaaju &im iše nisu potrebni

  • 8/17/2019 Slide o2 Prosirenja c

    5/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, Ig or T ar ta lj a1"

    Leksi%ki elementi

  • 8/17/2019 Slide o2 Prosirenja c

    6/13

    14.10. 2005. Pr oši renj a j ezi ka C, Igor Tar talj a21

    .onstante

  • 8/17/2019 Slide o2 Prosirenja c

    7/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, Ig or T ar ta lj a25

    Logi%ki tip podataka

  • 8/17/2019 Slide o2 Prosirenja c

    8/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, Ig or T ar ta lj a2'

    Dinami%ki objekti

    perator neD kreira je!an !inami&ki objekat nekog tipa T perator delete uništaa!inami&ki objekat nekog tipa T peran! operatora neD je i!enti*ikator tipa T

    sa eentualnim ini%ijalizatorima (argumentima konstruktora) perator neD"

     ' alo%ira potreban prostor u memoriji za objekat !atog tipa

     ' zatim pozia konstruktor tipa  Bko nema !ooljno prostora 'izuzetak '%d%llo) (zaglalje9neD?)

     ' pre stan!ar!a ' rezultat NL perator neD ra-a pokazia& na !ati tip

    int *ip = new int;o#ple *p)1 = new o#ple1::P,;

    $inami&ki objekat nastaje ka!a se izrši opera%ija neD,a traje se !ok se ne izrši opera%ija delete

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, Ig or T ar ta lj a3(

    nitavanje dinami%ki objekata

    perator delete ima je!an argument tipa pokazia&a nekog tipa aj pokazia& mora !a ukazuje na objekat kreiran pomo-u neD

     ' ako pokazia& ne ukazuje na objekat kreiran pomo-u neD,posle!i%e delete su nepre!i!ie

     ' ako je pokazia& NL, delete samo nema e*ekta

    perator delete ' pozia !estruktor za objekat na koji ukazuje pokazia& ' zatim oslobaa zauzeti prostor 

    perator delete ra-a void (bez rezultata)o#ple *p);void 3, 4 p)=new o#ple0:10:(,; void #%in , 4 3,; delete p);

    1 4. 10 .2 00 5. Pr oši re nj a j ez ik a C , I go r T ar ta lj a31

    Dinami%ki ni&ovi

    peratorom neD mo"e se kreirati i niz objekata nekog tipao#ple *p) = new o#ple[10];

    perator neD ra-a pokazia& na pri element alo%iranog niza

  • 8/17/2019 Slide o2 Prosirenja c

    9/13

    14 .1 0. 200 5. Pr ošir en ja j ezik a C, Ig or Ta rt alj a33

    Definisanje referenci

    Ee*eren%e se !eklarišu upotrebom znaka & ispre! imena Ee*eren%a je alternatino ime za neki objekat (alias, sinonim) !e*ini%iji re*eren%a mora !a se ini%ijalizuje objektom na koga -e upu-iati ! ini%ijaliza%ije re*eren%a postaje sinonim za objekat na koga upu-uje 3aka opera%ija na! re*eren%om (uklju&uju-i i opera%iju !o!ele)

     je opera%ija na! objektom na koji re*eren%a upu-ujeint i=1; // )elo'rojni o'je%t iint &j=i; // j 5p55je n% ii=; // #enj% se ij=; // opet se #enj% iint *p=&j; // isto Bto i &ij+=1; // isto Bto i i+=1int =j; // posred%n prist5p do i preo re3eren)eint #=*p; // posred%n prist5p do i preo po%$iv%U%

    1 4. 10 .2 00 5. Pr oši re nj a je zi ka C , I go r T ar ta lja34

    8mplementacija referenci

    Ee*eren%a je sli&na konstantnom pokazia&u na objekat !atog tipa,ali re*eren%a ne zauzima prostor u memoriji

    Ee*eren%a pri ini%ijaliza%iji !obija re!nost a!rese objekta kojim se ini%ijalizuje Nema na&ina !a se, posle ini%ijaliza%ije, re!nost re*eren%e promeni 3ako obra-anje re*eren%i po!razumea posre!ni pristup objektuF preko re*eren%e Posre!an pristup preko pokazia&a se rši operatorom G,

    a preko re*eren%e bez posebne opera%ije zimanje a!rese (operator &) re*eren%e ra-a a!resu objekta na koji ona upu-uje

    int &j = *new int(,; // j 5p55je n% din%#iUi o'je%t (int *p=&j; // p je po%$iv%U n% isti o'je%t*p,++; // o'je%t post%je j++; // o'je%t post%je Fdelete &j; // isto %o i delete p

     Bko je re*eren%a tipa re*eren%e na konstantu,objekat na koji ona upu-uje se ne sme promeniti preko te re*eren%e

    1 4. 10. 20 05 . Pr oš ir en ja j ezi ka C , Ig or T ar ta lj a35

    9)nkcije koje vra7aj) referenc)

    Ee*eren%a mo"e i !a se rati kao rezultat *unk%ije tom slu&aju *unk%ija treba !a rati re*eren%u na objekat

    koji traje ("ii) i posle izlaska iz *unk%ije.int& 3int &i,4int &r=*new inti,; return r; // Kint& 3int &i,4return *new inti,; // Kint& 3int &i,4return i; // K

    int& 3int &i,4int r=i; return r; // ! GRES

    int& 3int i,4return i; // ! GRESint& 3int &i,4int r=*new inti,; return r; // ! GRESint& 3int &i,4int j=i &r=j; return r; // ! GRES

    Eezultat pozia *unk%ije je lre!nost samo ako *unk%ija ra-a re*eren%u Ne postoje nizoi re*eren%i, pokazia&i na re*eren%e, ni re*eren%e na re*eren%e Ee*eren%a na pokazia& je !ozoljena, npr.

    int i=*p=&i*&rp=p;

    1 4. 10 .2 00 5. Pr oši re nj a je zi ka C , Ig or T ar ta lja36

    $eposredno )gra:ivanje f)nkcija 1!

    Desto se !e*inišu rlo je!nostane, kratke *unk%ije ' na primer, neke samo prosleuju argumente !rugim *unk%ijama ' reme koje se troši na prenos argumenata i pozi

    mo"e biti e-e nego reme izršaanja tela same *unk%ije

    ake *unk%ije se mogu !eklarisati uz za#te!a se neposre!no ugrauju u kH! (inline *unk%ije) ' telo take *unk%ije !irektno se ugrauje u kH! na mestu pozia *unk%ije ' semantika pozia ostaje potpuno ista kao i za obi&nu *unk%iju

    aka *unk%ija !eklariše se !o!aanjem kali*ikatora inline inline int in)int i, 4return i+1;

  • 8/17/2019 Slide o2 Prosirenja c

    10/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, Ig or T ar ta lj a3"

    $eposredno )gra:ivanje f)nkcija 2!

    /unk%ija &lani%a klase je ugraenaako se !e*iniše unutar !e*ini%ije klase

     Bko se !e*iniše izan !e*ini%ije klase, *unk%ija je ugraenaka!a se ispre! njene !e*ini%ije nalazi re& inline

    class 4 class I 4int i; int i;

     public"  public"int v%l , int v%l,;

    4return i;; ;

    inline int I""v%l,4return i;

    14.10. 2005. Pr oši renj a j ezi ka C, Igor Tar talj a3#

    $eposredno )gra:ivanje f)nkcija 3!

    Preo!ila% ne mora !a poštuje za#te za neposre!no ugraianje ' za korisnika oo ne pre!stalja problem, jer je semantika ista ' ugraene *unk%ije samo mogu !a ubrzaju program,

    a nikako !a izmene njegoo izršaanje

     Bko se ugraena *unk%ija koristi u iše !atoteka,u sakoj !atote%i mora !a se nae njena potpuna !e*ini%ija ' oo je najbolje sproesti pomo-u !atoteke;zaglalja

    u kojoj je !e*ini%ija *unk%ije za ugraianje ' ne!ostatak G.# !atoteka ne sa!r"i samo inter*ejsne

    e- i implementa%ione elemente (otkria se poslona tajnaJ)

    graene *unk%ije eliminišu potrebu za makroimaHde3ine KimeL(Klista argumenataL) Ktekst zameneL

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, I go r T ar ta lj a3'

    gra:ene f)nkcije )mesto makroa

    8akro!e*ini%ijaHde3ine #%ij,i,?j,,2i,"j,

    8akropozi#%++l++,

    8akroekspanzija++,?l++,,2++,"l++,

    Problem je!an argument se 2M inkrementira

    graena *;jainline int #%int i int j,

    4ret5rn i?j2i"j; Ne postoji gornji problem

    1 4. 10. 200 5. Pr oši re nj a j ez ik a C , I go r T ar ta lj a4(

    Podra&)mevane vrednosti arg)menata

    C++ po!r"aa po!razumeane re!nosti argumenata u !eklara%iji *unk%ije /ormalni argument uzima po!razumeanu re!nost

    ako se pri poziu *unk%ije ne nae!e o!goaraju-i starni argumento#ple""o#ple float r=0 float i=0,4re%l=r; i#%.=i;

    void #%in , 4o#ple )1 )(0, )00,; // sv% tri o'jet% 00,

    Po!razumeane re!nosti su proizoljni izrazi ' izra&unaaju se saki put pri poziu *unk%ije

    Po!razumeani argumenti mogu !a bu!u samo nekoliko posle!nji# izlisteo#ple""o#ple float r=0float i, // ! GRES

    4re%l=r;i#%.=i;

    o#ple""o#ple float rfloat i=0, // Tspr%vno;

    4re%l=r;i#%.=i;void #%in,4o#ple )0,;

  • 8/17/2019 Slide o2 Prosirenja c

    11/13

    1 4. 10 .2 00 5. Pr oš ir en ja j ez ik a C , Ig or T ar talj a41

    Preklapanje imena f)nkcija

    Desto su potrebne *unk%ije koje realizuju logi&ki istu opera%iju,samo sa razli&itim tipoima argumenata

    a saki o! ti# tipoa mora !a se realizuje posebna *unk%ija jeziku C to bi moralo !a se realizuje tako !a te *unk%ije imaju razli&ita imena,

    što smanjuje &itljiost programa jeziku C++ mogu-e je !e*inisati iše razli&iti# *unk%ija sa istim i!enti*ikatorom aka kon%ept nazia se preklapanje imena funkcija(engl. name overloadin ) slo je !a im se razlikuje broj iili tipoi argumenata, o!nosno potpis *unk%ije Tipoi rezultata ne moraju !a se razlikuju i nije !ooljno !a se samo oni razlikuju

    double #% double i double j,4 return i?j, 2 i " j;

    char* #% const char *p const char *q,

    4 return str)#ppq,?=0,2p"q; double r=#%1:(:,; // #%do5'ledo5' le,double r=#%1(:,; // do5'le,1; #%do5'ledo5 'le,char *q=#%CJer%CCi%C,; // #%)onst )6%r*)onst )6%r*,

    1 4. 10. 20 05 . Pr oš ir en ja j ezi ka C , Ig or T ar ta lj a42

    a&l)%ivanje kod preklapanja imena

  • 8/17/2019 Slide o2 Prosirenja c

    12/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, Ig or T ar ta lj a45

    Pregled operatora 2!

    == !=210

    9 9= ? ?=211

    99 ??212

    + -21O

    * / V214

    :* -?*215

    ! Y ++% @-% + - * & tip, si$eo3 neD delete11=

    %++ %@- specificni cast tpeid11

    [] , : -?21>

    ""1,21Q

    perator  Bso%.Rr.op.Prioritet

    1 4. 10 .20 05 . Pr oš ir enj a j ezi ka C , I gor T ar ta lj a46

    Operatori konver&ije tipa

    jeziku C postoji operator za konerziju tipa (engl. cast )tip,izraz

  • 8/17/2019 Slide o2 Prosirenja c

    13/13

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, Ig or T ar ta lj a4'

    .onstantna konver&ija

    .onstantni kast je namenjen uklanjanju ili !o!aanju const i volatile $o!aanje mo!i*ikatora je bezbe!no, ali uklanjanje nije

     '  jer omogu-aa promenu re!nosti konstante

    Primeriint j = 1; const int i = j;int *p = const_cast9int *?&i,;

    *p = 0; // pro#en% onst%ntno. pod%t%double pi = :1F;const double &)pi = const_cast9const double &?pi,;

    // ili" const double &)pi=pi;pi = 0:0; // K)pi = 0:0; // ! GRES

    1 4. 10 .2 00 5. Pr oši re nj a j ezi ka C, I go r T ar ta lj a5(

    Prostor imena

    Problem kon*likta imena ' 2 globalne promenljie sa spoljašnjim poezianjem,

    u !e !atoteke, !a programera mogu isto !a imenuju

    Eešenje problema ' prostor imena (engl. namespace)