C++ Klase 1

Embed Size (px)

Citation preview

  • 7/23/2019 C++ Klase 1

    1/25

    Programski jezici 1

    1. dio

    Elektrotehniki fakultet

    Banja Luka

    KLASE I APSTRAKCIJA PODATAKA

    Goran [email protected]

    12/3/15

  • 7/23/2019 C++ Klase 1

    2/25

    Klase 1. dio

    Sadraj !a"like #/#$$ %rogra&iranja

    'sno(ne karakteristike klase

    )e*nisanje klase

    +%eci*katori %ristu%a lano(i&a klase

    !a"like i"&e,u de*nicije i deklaracije klase 'blast de*nisanosti i %ristu% lano(i&a klase -o&one funkcije u klasi

    odulari"acija 0nicijali"acija objekata konstruktori

    )estruktori !edoslijed i"(ra(anja konstruktora i destruktora

  • 7/23/2019 C++ Klase 1

    3/25

    sno(ne ra" e $$%rogra&iranja

    Programiranje ! jezik! C -roceduralno algorita&ski

    orijentisano

    4edinica %rogra&iranja 67K#048

    -rogra&eri se koncentriu na%isanje funkcija9 funkcije segru%iu u %rogra&

    -odaci nisu %ri&arni9 oni su ufunkciji %odrke akcija&a kojefunkcije i"(ode

    :lagoli odre,uju ta siste& radi ikoje e funkcije bitii&%le&entirane

    0nstance ugra,enih ti%o(aint9 char9 ; na"i(aju se

    "romjen#ji$e $arija%#e

    Programiranje ! jezik!C&& 'bjektno orijentisano

    4edinica %rogra&iranja

    KL8+8 -rogra&eri se koncentriu

    na kreiranje (lastitihti%o(a %odataka KL8+E

    0&enice su te kojeodre,uju siste& i&eniceodre,uju klase

    +(aka klasa sadr

  • 7/23/2019 C++ Klase 1

    4/25

    'sno(ne karakteristike klase

    KLASA omog!*a$a mode#o$anje o%jeka(a+ koje karak(eri,!- a(ri%!(i"odaci '#anice data members

    "ona,anjeili o%eracije )!nkcije '#anice member functions

    6 neki& '' %rogra&ski& je"ici&afunkcije lanice se na"i(aju

    me(ode.

    .aj$anije karak(eris(ike KLASE kao "ra$og (i"a "oda(aka- Odre/!j! mog!*e $rijednos(i o%jeka(a+

    Odre/!j! mog!*e o"eracije nad o%jek(ima+

    O%ez%je/!j! o%a$ezn! inicija#izacij! o%jeka(a "ri nji0o$oms($aranj!+

    O%ez%je/!j! !ni,(a$anje o%jeka(a kada $i,e nis! "o(re%ni+

    O%ez%je/!j! enka"s!#acij! a(ri%!(a i "ona,anja ! jedins($en!cje#in!+

    Omog!*a$aj! "rinci" skri$anja in)ormacija in)orma(ion 0iding23

  • 7/23/2019 C++ Klase 1

    5/25

    )e*nisanje klase

    KL8+8 se de*niekorienje& kljune

    rijei class.

    6obiajeno na"i(klase "a%oinje(eliki& slo(o&.

    O",(i o%#ik de4nicijek#ase

    c#ass Ime

    5

    (i" c#an67

    "!%#ic-

    (i" c#an67

    "ri$a(e-

    (i" c#an67

    86

    ja(ni lano(i klase

    %ri(atni lano(i klase

    %ri(atni lano(i klase

  • 7/23/2019 C++ Klase 1

    6/25

    %ri(atni lano(i klase

    ja(ni lano(i klase

    -ri&jer de*nicije klase

    c#ass Raz#omak

    5

    "!%#ic-

    Raz#omak26

    $oid se(Broji#acin( %26$oid se(Imeni#acin( n26$oid "rin(Raz#omak269oa( $rijednos(26

    "ri$a(e-

    in( %roji#ac6in( imeni#ac6

    86

    unkcije lanice

    najee su ja(nilano(i klase

    -odaci lanice najeesu %ri(atni lano(iklase skri$anje

    in)ormacija

  • 7/23/2019 C++ Klase 1

    7/25

    %ec ator %r stu%a an ca&aklase

    "!%#ic +(e lanice de*nisane i"a

    s%eci*katora %ublic= suja$ne.

    4a(na lanica klase dostu%na je iz%i#o kojeg dije#a "rogramau

    koje& je dostu%an objekat dateklase.

    4a(na lanica dostu%na je i i"unutranjosti klase.

    6obiajeno su )!nkcije '#aniceja$nelanice klase funkcije o%isuju

    %onaanje9 odnosno o%eracije nadobjekti&a.

    "ri$a(e +(e lanice de*nisane i"a

    s%eci*katora %ri(ate= su "ri$a(ne.

    -ri(atnoj lanici klase ne &o

  • 7/23/2019 C++ Klase 1

    8/25

    e n c a ase >? e arac aklase

    De4nicija k#ase %odra"u&ije(ana(o,enje s(ih lanica klase.

    Dek#aracija k#ase%odra"u&ije(a da se sa&ona"nai deklarie da nekiidenti*kator %redsta(lja klasu.

    O",(i o%#ik dek#aracije k#ase=

    class Ime;

    Kad je klasa de*nisana9 &ogu sede*nisati kreirati i njene instanceobjekat9 ni" objekata9 u%ui(a9%oka"i(a na objekat.

    -ri&jer=

    Klasa objekat;

    Klasa niz[100];

    Klasa *pointer;

    Klasa &upucivac = objekat;

    8ko je %o"nata sa&o deklaracijeklase ne &ogu se instanciratiobjekti9 (e &ogu sa&o da sede*niu %oka"i(ai.

  • 7/23/2019 C++ Klase 1

    9/25

    )e*nicija funkcija lanica klase

    :!nkcije '#anice mog! da sede4ni,! !n!(ar k#ase. :!nkcije '#anice mog! da sede4ni,! iz$an k#ase+ a#i se!n!(ar k#ase (re%a na$es(inji0o$ "ro(o(i"3-ri&jer=

    class Counter {

    private int count; public !!! voi" print#$

    {cout %% count;

    !!! ;

    -ri&jer=

    class Counter

    { private int count; public !!! voi" print#$;

    !!! ;

    voi" Counterprint#$ {

    cout %% count;

    Praksa "okaz!je da je %o#je !n!(ark#ase na$es(i samo "ro(o(i"+ a

    )!nkcij! '#anic! de4nisa(i iz$an)!nkcije3

    t t t

  • 7/23/2019 C++ Klase 1

    10/25

    ast e n sanost %r stu%lano(i&a

    ;#anice k#ase dos(!"ne s! s$im os(a#im '#anicama da(e k#ase.!eferenciraju se na(o,enje& i&ena lanice.

    Iz$an k#ase9 lanice klase &ogu da se referenciraju %o&ou= objekta ? o%jeka(3c#anica %oka"i(aa na objekat ? "okazi$ac"okazi$ac23c#anica u%ui(aa na objekat ? !"!ci$ac3c#anica

    -ro&jenlji(e de*nisane u nekoj funkciji lanici (idlji(e su sa&o u tojfunkciji.

    8ko je unutar funkcije lanice de*nisana %ro&jenlji(a sa isti&i&eno& kao neki %odatak lan klase9 onda lokalna %ro&jenlji(a&askira %odatak lan.

    Pris(!" maskiranom a(ri%!(! %reko o%eratora "a ra"rjea(anjedosega ==.

    t t t

  • 7/23/2019 C++ Klase 1

    11/25

    ast e n sanost %r stu%lano(i&a

    Primjer-

    'inclu"e %iostream(usin) namespace st";

    class Counter{ public

    int ; voi" print#$ { cout %% %% en"l; ;

    int main#${ Counter c; ++ kreira objekat c #instanca klase Counter$ Counter *pc = &c; ++ pointer na c

    Counter &uc = c; ++ upucivac na c c! = ,; ++ postavlja vrije"nost atributa objekta c!print#$; ++ "irektan poziv -unkcije .lanice

    uc! = /; ++ postavlja vrije"nost pomocu upucivaca uc!print#$; ++ poziv -unkcije pomocu upucivaca

    pc( = 10; ++ postavlja vrije"nost pomocu pointera pc(print#$; ++ poziv -unkcije pomocu pointera

    ,/10

    Poda(ak '#an ? je ja$ni a(ri%!(3 O$o (re%a

    iz%jega$a(i@'(dje je korieno sa&o radi ilustracije %ristu%aA

    t t t

  • 7/23/2019 C++ Klase 1

    12/25

    ast e n sanost %r stu%lano(i&a

    Primjer-

    'inclu"e %iostream(usin) namespace st";int ; ++ )lobalna promjenljivaclass Klasa{ public

    voi" set#int i$ { =i; voi" primjer#$; private int ; ++ po"atak clan;voi" Klasaprimjer#${ int =1; ++ lokalna promjenljiva

    cout %% 2okalno %% %% en"l; cout %% 3tribut %% Klasa %% en"l; cout %% 4lobalno %% ;int main#${ Klasa t; t!set#100$; t!primjer#$;

    2okalno 13tribut 1004lobalno 0

    t t t

  • 7/23/2019 C++ Klase 1

    13/25

    ast e n sanost %r stu%lano(i&a

    Primjer-

    'inclu"e %iostream(usin) namespace st";

    class 5ime{ public voi" set5ime#int6 int6 int$;

    voi" print7#$; voi" print8#$; private int sat6 min6 sek;;

    voi" 5imeset5ime#int 96 int m6 int s${

    sat = # 9 (= 0 && 9 % : $ < 9 0; min = # m (= 0 && m % 0 $ < m 0; sek = # s (= 0 && s % 0 $ < s 0;

    voi" 5imeprint7#${ cout %% #sat%10

  • 7/23/2019 C++ Klase 1

    14/25

    ast e n sanost %r stu%lano(i&a

    Pri$a(nim '#ano$ima k#ase mog! da"ris(!"e- )!nkcije '#anice date klase "rija(e#jske )!nkcije date klase.

    i%ino se i&%le&entiraju sljedee funkcije

    lanice= "a %osta(ljanje atributa ? t"(. se(

    funkcijan%r. se(Time+ se(in+ se(Sek

    "a oita(anje atributa ? t"(. ge(funkcija

    n%r. ge(Sa(9 ge(in9 ge(Sek

    -ri&jer=

    class Danka { private -loat stanje; public !!! voi" set8tanje#-loat ns$ { stanje = ns;

    -loat )et8tanje#$

    { return stanje; !!! ; !!! Danka racun; racun!set8tanje#0$; cout %% racun!)et8tanje#$;

  • 7/23/2019 C++ Klase 1

    15/25

    -o&one funkcije u klasi

    .e moraj! s$e )!nkcije '#anice da %!d! ja$ne %ogoto(o ako onenisu dio interfejsa klase.

    8ko neka funkcija slu

  • 7/23/2019 C++ Klase 1

    16/25

    odulari"acija

    rea#izaciji $e*i0 "rograma "re"or!'#ji$o je mod!#arizo$a(i kod.-ri to&e interfejs klase treba od(ojiti od i&%le&entacije.

    (ime30 in(er)ejs2

    'i-n"e- 5I7EFG'"e-ine 5I7EFG

    class 5ime{

    public voi" set5ime#int6 int6 int$; voi" print7#$; voi" print8#$; private int sat6 min6 sek;;

    'en"i-

    "rimjer3c"" im"#emen(acija2

    'inclu"e %iostream('inclu"e time!9usin) namespace st";

    voi" 5imeset5ime#int 96 int m6 int s$

    { sat = # 9 (= 0 && 9 % : $ < 9 0; min = # m (= 0 && m % 0 $ < m 0; sek = # s (= 0 && s % 0 $ < s 0;

    voi" 5imeprint7#${

    cout %% #sat%10

  • 7/23/2019 C++ Klase 1

    17/25

    n c a "ac a o e ata ?K'7+!6K'!0

    Kons(r!k(or s%ecijalna funkcija lanica koja omog!*a$ainicija#izacij! o%jek(a%riliko& njego(og kreiranja. Konstruktor i&a is(o ime kao i k#asa kojoj "ri"ada. Kons(r!k(or nema (i" 'ak ni $oid@ Konstruktor se auto&atski %o"i(a s(aki %ut kad se kreira neki objekat.

    -ri&jer=

    class 5ime

    {

    private

    int 996 mm6 ss;

    public !!!

    5ime#$ { 99 = mm = ss = 0;

    !!!

    ;

    !!!

    5ime t;

    n c a ac a o e ata

  • 7/23/2019 C++ Klase 1

    18/25

    n c a "ac a o e ata ?K'7+!6K'!0

    0ako %rogra&er eks%licitno ne %o"i(a konstruktor %ri kreiranju objekta9i%ak je &ogue u konstruktor %renijeti %ara&etre koji&a e seinicijali"o(ati atributi. '(i %ara&etri na"i(aju se inicijali"atori i na(odese unutar &alih "agrada %riliko& de*nisanja objekta. 0nicijali"atori%redsta(ljaju argu&ente koji se %roslje,uju konstruktoru.

    -ri&jer= class 5ime { private int 996 mm6 ss;

    public

    5ime#int 96 int m6 int s${99=9; mm=m; ss=s;

    ;

    H

    5ime po"ne#1:6060$6 ponoc#06060$;

    K#asa ne mora da ima kons(r!k(or3

    'bjekti &ogu da se inicijali"uju drugi&funkcija&a lanica&a.

    Praksa "okaz!je da je naj%o#je dase o%jeka( inicija#iz!je

    kons(r!k(orom3

    n c a "ac a o e ata

  • 7/23/2019 C++ Klase 1

    19/25

    n c a "ac a o e ata ?K'7+!6K'!0

    Konstruktori &ogu da se %rekla%aju $i,e kons(r!k(ora sa"rek#o"#jenim imenom ! k#asi9 to o&ogua(a ra"liite naineinicijali"acije objekata ra"liita %oetna stanja.

    -ri&jer=

    class 5ime

    { private int 996 mm6 ss; public 5ime#int 96 int m6 int s$

    { 99=9; mm=m; ss=s;

    5ime#int s${ 99=s+@00; mm=#s>@00$+0; ss=s>0; ;

    !!!

    5ime po"ne#1:6060$;

    5ime pet"o1:#11660$;

    5ime ponoc#0$;

    n c a "ac a o e ata

  • 7/23/2019 C++ Klase 1

    20/25

    n c a "ac a o e ata ?K'7+!6K'!0

    Konstruktor moe da ima i "odraz!mije$ane $rijednos(iarg!mena(a.

    -ri&jer=

    class 5ime{

    private int 996 mm6 ss; public 5ime#int 9=06 int m=06 int s=0$

    {99=9; mm=m; ss=s;

    ;H

    5ime po"ne#1:$6 ponoc6 pet"o1:#116$;

    n c a "ac a o e ata

  • 7/23/2019 C++ Klase 1

    21/25

    n c a "ac a o e ata ?K'7+!6K'!0

    Podraz!mije$ane $rijednos(i mog!da se na$ed! ! "ro(o(i"!kons(r!k(ora (ada se ne na$ode !de4niciji kons(r!k(ora@

    Podraz!mije$ane $rijednos(i mog!da se na$ed! ! de4nicijikons(r!k(ora (ada se ne na$ode !"ro(o(i"! kons(r!k(ora@

    -ri&jer=

    class 5ime{ private int 996 mm6 ss; public !!! 5ime#int=06 int=06 int=0$;

    !!!;

    !!!5ime5ime#int 96 int m6 int s${ 99=9; mm=m; ss=s;

    -ri&jer=

    class 5ime{ private int 996 mm6 ss; public !!! 5ime#int6 int6 int$;

    !!!;!!!5ime5ime#int 9=06 int m=06 int s=0${ 99=9; mm=m; ss=s;

    .ije doz$o#jeno "odraz!mije$ane $rijednos(i na$odi(i i ! "ro(o(i"! i! de4niciji kons(r!k(ora is(o $ai i za os(a#e )!nkcije '#anice@2@

  • 7/23/2019 C++ Klase 1

    22/25

    )E+!6K'!0

    Des(r!k(ori slino konstruktoru jo jedna s%ecijalna funkcija lanicaklase

    )estruktor se %o"i(a s(aki %ut kad se unita(a neki objekat.

    )estruktor sutinski ne unita(a objekat objekat e biti uniten i usluaju da klasa ne&a de*nisan destruktor ? destruktor slu

  • 7/23/2019 C++ Klase 1

    23/25

    !edoslijed konstruktora i destruktora

    Konstruktori i destruktori se %o"i(aju auto&atski.!edoslijed koji& se %o"i(aju o(e funkcije "a(isi od redoslijeda koji& se ula"ii i"la"i i" do&ena u koje& se objekti kreiraju. Genera#no+ des(r!k(ori se"ozi$aj! o%rn!(im redos#ijedom ! odnos! na "ozi$ kons(r!k(ora3

    a g#o%a#ne o%jek(e- Kons(r!k(or se "ozi$a "rije %i#o koje )!nkcije i %rije &ain funkcije tj.

    %rije %oetka i"(ra(anja %rogra&a. u sluaju (ie fajlo(a9 redoslijedi"(ra(anja konstruktora nije una%rijed %o"natA

    Des(r!k(or se "ozi$a nakon za$r,e(ka iz$r,a$anja main23

    a #oka#ne i a!(oma(ske o%jek(e-

    Kons(r!k(or se "ozi$a ! (ren!(k! kad se o%jeka( de4ni,e3 Des(r!k(or se "ozi$a ! (ren!(k! na"!,(anja %#oka ! kojem je o%jeka(

    de4nisan3

    a s(a(i'ke o%jek(e- Kons(r!k(or se "ozi$a samo jednom < "ri#ikom de4nisanja o%jek(a3

    Des(r!k(or se "ozi$a samo nakon za$r,e(ka iz$r,a$anja )!nkcije main3

  • 7/23/2019 C++ Klase 1

    24/25

    !edoslijed konstruktora i destruktora

    'inclu"e %iostream(usin) namespace st";class K{ public K#int $ { "ata = ;

    cout %% Konst %% "ata; JK#$ { cout%%est %%"ata%%en"l; private int "ata;;

    voi" create# voi" ${

    K k"#$; cout %% #create lokalni$ %% en"l; static K k"#$; cout %% #create staticki$ %% en"l; K k",#,$; cout %% #create lokalni$ %% en"l;

    K k"1#1$; ++ )lobalni objekat

    int main#$

    { cout %% #ulaz u main$L%% en"l; K k":#:$; cout %% #main lokalni$L%%en"l; static K k"@#@$; cout %% #main staticki$L%%en"l; create#$; K k"#$;

    cout %% #main lokalni$L%%en"l; cout %%Izlaz iz pro)ramaL%%en"l;

    Konst 1 #ulaz u main$Konst : #main lokalni$Konst @ #main staticki$Konst #create lokalni$Konst #create staticki$Konst , #create lokalni$est ,est Konst #main lokalni$Izlaz iz pro)ramaest est :est

    est @est 1

  • 7/23/2019 C++ Klase 1

    25/25

    strin)

    'inclu"e %iostream('inclu"e %cstrin)(

    'inclu"e %strin)(usin) namespace st";

    int main#${ strin) str1#Danja 2uka$6 str:; cout %% str1 %% en"l; cout %% size %% str1!size#$ %% en"l; cout %% len)t9 %% str1!len)t9#$ %% en"l; cout %% maFsize %% str1!maFsize#$ %% en"l;

    cout %% Mnesite strin) ; cin (( str:; cout %% Mnijeli ste %% str: %% en"l;

    str:!assi)n#Danja$; ++ str: = Danja; str:!pus9Fback#N N$; str:!appen"#2uka$; cout %% Oovi strin) %% str: %% en"l;

    cout %% 8trin)ovi %% #str1!compare#str:$==0 < su nisu$ %% je"naki %% en"l;

    cout %% Pnak#$ %% str1!at#$ %% en"l %% en"l;

    Danja 2uka size 10 len)t9 10 maFsize 10,@,1/:0Mnesite strin) obojMnijeli ste obojOovi strin) Danja 2uka8trin)ovi su je"nakiPnak#$ 2

    Oakon zamjene D! 2ukaOovi strin) D! 2!?o"strin) 2uka

    cFstr Danja 2uka

    str1!replace#16 6 !$; cout %% Oakon zamjene %% str1 %% en"l;

    str1!insert#6 !$; str1!erase#6 @$; cout %% Oovi strin) %% str1 %% en"l; cout %% ?o"strin) %% str:!substr#6 $;

    c9ar *p = neQ c9ar[str:!size#$ R 1]; strcpS#p6 str:!cFstr#$$; cout %% en"l %% cFstr %% p; "elete [] p;

    return 0;