C++ Klase 1
-
Upload
milana-tomic -
Category
Documents
-
view
235 -
download
0
Transcript of C++ Klase 1
-
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;