You are on page 1of 45

E Ei io od dy y y yq q o o1 1q q C C+ ++ +

1.Zc1ik c 1q C++
|to ouvp0tovp yAoooo npoypoottoo (n.x. C, C++, PASCAL) ctoyAottct tov
npyoo kotko tou npoypoto oc cktcAotp opqp nou vo kotoAo8ovct o
cnccpyootp. H opqp outp cvot p yAoooo pxovp, kot toqpct yto k0c
cnccpyootp, opxttcktovtkp kot Acttoupytk ootpo. H cktcAotp opqp cv
npoypoto yto to ouykckptvp opxttcktovtkp, cv cvot uvot vo xppotonotp0c
oc toqopcttkp opxttcktovtkp, pAop c nopoc vo xppotonotpoouc to cktcAoto
npypoo yto WIndows oc vov unoAoytotp |acIntosh. ttot, cvot onopotptp p ck
vou ctoyAotttop tou npyoou kotko (source code) yto k0c opxttcktovtkp otpv
onoo 0Aouc vo tpouc to npypoo.
H c1dyK 11ioq { c o m p I I e ) & Z v coq { I I n k )
Zto nopokto oxpo onctkovctot p totkooo tp ctoyAotttop cv npoypoto
C++ kot cv npoypoto Java.
Bpyoo Kotko
(source code)
Bpyoo Kotko
(source code)
C++ compIler
Java compIler
Kotko |pxovp
(NatIve code)
Java 8ytecode
Java 7Irtual
|achIne (J7|)
Enccpyootp
(CPU)
id ikdo1ik q c qt v c R p c yp dd1io { P r o c e d u r a I q 5 t r u c t u r e d
P r o g r a m m I n g )
Dt noAottcpc yAoooc npoypoottoo no ot C, PASCAL, FDFTFAN tvov qoop
Zpctooct C++ ZcAo 1
otpv totkooo kot oto otto nou okoAou0ovtot yto tpv cntcup knotou otxou. To
ovttkccvo ptov o kotko (codecentrIc yAoooc npoypoottoo). D
npoypootto ytvtov opovto tp pop cktAcop (on to otto A, oto otto 8)
kot tt ovtototxc unopoutvc.
A v 1ikcicv c o1p d q n p c yp dd1io { 0 b ] e c t - 0 r I e n t e d P r o g r a m m I n g )
Dt ovttkctcvootpoqc yAoooc npoypoottoo (Java, EIffel, Smalltalk kot quotk
C++) vouv qoop oto covo nop otov kotko. To npypoo ovontooctot
ypo on to covo (datacentrIc) to onoo opouv on vo tou tov tpno c tov
onoo nopouc vo to toxctptotoc.
D quotk kot o tcxvpt koo nou oc cvot nto kovt otp qtAoooqo tou
Avttkctcvootpoqp npoypoottoo nop tou Lopvou npoypoottoo.
tvo onA nopctyo nou nopoc vo xppotonotpoouc yto tpv kotovpop tp
qtAoooqo tou ovttkctcvootpoqo npoypoottoo cvot to outokvpto.
K0c outokvpto cvot vo ovttkccvo nou ovpkct oc to kAop nou opct to 8ootk
xopoktpptottk tou outoktvptou. Aut nopc vo toqpouv ovcoo otou
kotookcuoot oAA Ao 0o nopxouv to 8ootk xopoktpptottk nou opct p kAop
"outokvpto" yto tp xppop tou. LpAop ttvt, ykt, qpvo, ounAktp kot toxtptc.
Aut cvot to covo. K0c vo on out opct tov tpno xppop tou. To ttvt
otp8ct optotcp/ct, to ncvtA ntovtot p oqpvovtot kot ot toxtptc oAAouv
tokptt xovto pxovto ooqoAco - c nopoc vo oAAouc toxtpto oc
nto0cv cvo to outokvpto ktvctot c toxtpto.
H uAonopop ko0cv on outo tou pxovtoo toqpct oc k0c kotookcuootp,
oAA p xppop tou cvot p to yto Aou. LpAop p xppop tou ttovto kot tov
toxutptov yvctot c tov to tpno ovcoptpto kotpyopo, kotookcuootp kot
ovtAou tou outoktvptou. Enop, o pxovto c tov onoo yvctot p xppop tov
covov outov cvot kpuvo on tov xppotp (pAop tov opy). D xppotp cv
cvtoqpctot yto tov tpno ctoop tp kvpop on to ttvt otou tpoxo ootc to
outokvpto vo otpqct. Enop, p xppop cv outoktvptou cv oAAct c tpv cnktoop
tou p oAAoyp optovov xopoktpptottkov tou (no n.x. vo pxovp, Aottxo, kAn).
AAAct p ouncptqop tou oAA xt p xppop tou.
|c outv tov tpno, ncptypqoc c vo onA nopctyo to nto opovttk
xopoktpptottk tou ovttkctcvootpoqo npoypoottoo:
EncapsulatIon ()
H totkooc kp8ovtot on to xppotp kot to to to covo npootopouv tou
tpnou toxcptop tou.
PolymorphIsm (noAuopqto)
Avttkccvo nou ovpkouv oc nopotc kAoct nopov vo xouv kotv tpno
npoonAoop, c onotAcoo o xppotp vo nopc vo to xctptotc c tov to tpno
xop vo xpctctot vo 0ct vc totkooc.
nherItance (kAppovotktpto)
|nopoc vo ptoupypoouc vo vo ovttkccvo nopvovto o 8op vo AAo pp
unpxov. To vo ovttkccvo 0o xct to xopoktpptottk tou noAto cvo 0o nopt vo
to tpononotpoct, vo to cncktcvct kot vo npoo0oct kotvopto yto vo koAqct
ouykckptvc ovykc.
Zpctooct C++ ZcAo 2
2.cq 1q C++
Dno kot k0c yAoooo npoypoottoo, tot kot p C++ okoAou0c knotou kovvc
otp ovtop kot uAonopop cv npoypoto. Dt kovvc outo oqopov tp pAoop
cto8Aptov, tou tnou covov, tou optoo kAocov kAn.
H c1d K q1t
H vvoto tp cto8Aptp cvot oo p nto 0ccAtop otov npoypootto ycvtk. H
cto8Aptp cv cvot AAo on to ovooovp 0op vpp nou nopc vo ncptxct
covo onotoupnotc cou. To ncptcxcvo tp cto8Aptp nopc vo cto8AActot
c' o kot to vo tp c covo nopotou cou.
Dt cto8Apt opovtot o cp:
type var;
nou
type
to co tp cto8Aptp kot
var
to vo tp. 0 co nopoc vo
toAouc vov on tou to0otou tnou covov tp C++ p to voo to
kAop ovttkctvov (oc cncvp nopypoqo).
T u p c c1d K q1 v
|to cto8Aptp 0copctot ykupp, pAop to ovoqop oc outpv xct vpo vo oo
oto nAtoto oto onoo opctot. To nAooto nopc vo cvot to kAop, to ouvptpop p
0oo, to nco toxo cv loop
for
/
while
/
do
p tov cvtoAov
if
/
else
/
switch
.
Bopctyo:
type var1;
if () {
// var1 ().
// var2 ().
type var2;
// var2 ()
}
// var1 ()
// var2 ()
T n c i c c t v v
Dt 8ootko tnot covov otp C++ cvot oxcv ot tot c outo tp C.
AkoAou0c nvoko c tou to0otou tnou covov tp C++ kot to yc0 tou
oc bytes, yto vo ouvp0tovo PC (J2bIt opxttcktovtkp):
Dvoa Mys0o (os bytes) Dpta
char 1 128 o 127
short 2 J2,768 o J2,767
int/long 4 2,147,48J,648 o 2,147,48J,647
long long
8
9,22J,J72,0J6,854,775,808 o
9,22J,J72,0J6,854,775,807
float 4 1.4 * 10
45
o J.4 * 10
J8
Zpctooct C++ ZcAo J
Dvoa Mys0o (os bytes) Dpta
double 8 4.9 * 10
J24
o 1.8 * 10
J08
bool 1 true / false
wchar 2
string cto8Apt
Dt tnot covov
char
,
short
,
int
,
long, long long
npoopovtot yto xppop c
okpotou opt0o, cvo ot tnot
float
,
double
yto xppop opt0ov ktvptp
unotootoAp (pA. ckotkov opt0ov). D tno
bool
nopc vo Ao8vct vo o
tt
true
kot
false
. D tno
wchar
xct yc0o 2 bytes ytot xct oxctootc vo
ncptxct xopoktppc UnIcode (UTF16 yto tpv okp8cto).
Bopocyoto pAoocov kot opxtkonotpocov cto8Aptov:
int an_integer;
an_integer = 10;
long a_long = an_integer *1000;
double verysmallnumber = 0.000000000003;
bool am_i_hungry = false;
char alpha = 'a';
string text = this is a text;
u n s I g n e d c1d K q1t
Ztp C++ no kot otp C, oAA ovt0cto c tp Java, nopoc vo toopqooouc to
cpo tov cto8Aptov
char
,
short
,
int
,
long
,
long long
ootc vo ncptxouv vo
0cttko opt0o. Ztpv npoyottktpto opouc to bIt tou npoopou (sIgn) vo
xppotonotctot kot out yto op0pop, tnAootovto tot to cpo tov 0cttkov
opt0ov tou k0c tnou. Dt tnot outo toxopovtot c tou onAo c tp Ap
unsigned
npv on to voo tou tnou. To cpo outov tov tnov qovctot otov
nopokto nvoko:
Dvoa Mys0o
(os bytes)
Dpta
unsigned char 1 0 o 255
unsigned short 2 0 o 65,5J5
unsigned int/
unsigned long
4
0 o 4,294,967,295
unsigned long long 8 0 o 18,446,744,07J,709,551,615
Z1d6 cp t { c o n s t a n t s )
Av kot ot cto8Apt xouv oxctootc vo cto8AAovtot, unpxouv ncptntooct nou
xpctoootc knotc oto0cp, no oto |o0pottk. |nopoc vo pAooouc to
cto8Aptp o oto0cp (pAop nou vo p cto8AActot) c tp Ap
const
. LpAop,
const double pi = 3.1415;
Zpctooct C++ ZcAo 4
T cK co1t { o p e r a t o r s )
|nopoc vo cktcAoouc tqopc npct cto tov cto8Aptov c tp xppop tov
tcAcotov. Dt tcAcot cvot o8oAo nou ovttototxov oc opt0pttk p Aoytk npct
cto tov ovttkctvov. Ynpxouv 4 cp tcAcotov otp C++ (0o ovoqpouc to tpo
nto opovttk, kot 0o oqpoouc tou uotko tcAcot npo to nopv).
A p i6 q1ikc 1cK co1t
I06oAo Eo
+ Bpo0cop
- Aqopcop
* BoAAonAootoo
/ Ltopcop
% YnAotno Ltopcop
++ Aupttk tcAcotp
-- Aqotpcttk tcAcotp
Ettk yto tou oupttko kot oqotpcttko tcAcot, npnct vo ovoqpouc tt outo
ouvouv p oqotpov tpv ttp tp cto8Aptp kot o ovo (kot ouvncto
xppotonotovtot vo oc okpotc cto8Apt, xt oc ckotk). Bopctyo:
int x = 10;
x++; // x 11
x--; // 10
EntnAov, ot tcAcot outo nopov vo cktcAcotov npv p ct tov unoAoyto tp
nopotoop otpv onoo ovpkouv, yto nopctyo:
int x = 10; // x 10
int y = x++; // y 10, x 11
x = 10; // x 10
int z = ++x; // z 11, x
Zcoidkc T cK co1t
Dt oxcotoko tcAcot ovoqpovtot otpv oxop cto o ovttkctvov.
I06oAo Eo
== otpto
!= Avtotpto
> |cyoAtcpo on
< |tkptcpo on
>= |cyoAtcpo on p oo c
<= |tkptcpo on p oo c
Zpctooct C++ ZcAo 5
A c yikc T cK co1t
Dt Aoytko tcAcot ovoqpovtot otou tpnou ouvuooov oAp0ov kot qcuov
npotocov.
I06oAo Eo
&& ShortcIrcuIt AN0
|| ShortcIrcuIt DF
! NDT (pvpop)
Av c tov unoAoyto tp npotp nopotoop o ouvuoo 8yovct oAp0p p qcup
ttc onoqcyctot o unoAoyto tp ctcpp.
Fto nopctyo, ov xouc tpv nopotoop
(alpha == true) && (beta == 1)
to npypoo 0o cntotpqct ooo qcup ttp (false) ov p npotp cvot qcup, kot 0o
npoxoppoct otov unoAoyto tp ctcpp vo ov p npotp cvot oAp0p.
Ztpv npoyottktpto cvot 0o cotkovpop xpvou.
T cK co1t kd1d p qoq
Dt tcAcot kotoxoppop xppotonotovtot yto vo cto8Aouv to ncptcxcvo to
cto8Aptp. |nopov vo ouvuootov kot c AAou tcAcot yto ouvtcuop knotov
npcov. Bopocyoto tcAcotov kotoxoppop:
int x = 4;
x = 10;
x += 20; ( x = x + 20, 30)
x /= 10; ( x = x / 10, 3).
I06oAo Eo
x += y to to c
x = x + y
x -= y to to c
x = x - y
x *= y to to c
x = x * y
x /= y to to c
x = x / y
x %= y to to c
x = x % y
x &= y to to c
x = x & y
x |= y to to c
x = x | y
^= to to c
x = x ^ y
R dp do1oci { E x p r e s s I o n s )
Dnotoopnotc ykupo ouvuoo cto8Aptov, oto0cpov, opt0ov kot tcAcotov
koActot to nopotoop. To onotAcoo tp nopotoop nopc vo cvot knoto on
tou tnou covov tp C++ (
int
,
long
,
double
,
bool
, kAn) p knoto ovttkccvo
Zpctooct C++ ZcAo 6
(n.x.
string
).
Bopocyoto:
int b = 10, i;
i = 2*b*b; ( )
if (b * b <= 100 && i > 0)
cout << The expression is true << endl;
string a = "ena, dyo";
string b = a + string(", testing");
P o I n t e r s & k e f e r e n c e s
Ztp C kot otp C++ vctot p uvottpto cop npoonAAoop oto ncptcxcvo tp
ncptoxp tp vpp nou ncptxct knoto cto8Aptp. Aut oo qovctot kno
cntkvuvo, oAA npooqpct cyAc uvottptc otov npoypoottotp vo ctoxoppoct
8o0t otp op tou npoypoto. Autp p npo8oop npoyotonotctot c o tpnou,
c poInters kot references. To references qotvocvtk cvot vo nto koq tpno
xppop tov poInters oAA otpv ouoo cvot ktt noponvo ko0o npooqpouv knotc
cntnAov uvottptc ooqActo tov covov. Dt poInters xppotonotovtot kot
kpov otp uvotkp ptoupyo ovttkctvov c tp
new
(oc cncvp cvtpto).
Av xouc to cto8Aptp
a
tnou
string
, nopoc vo xouc coo tpv ovoqop
(reference) otpv tc0uvop vpp nou ncptxct to ovttkccvo strIng noA ckoAo c
tov tcAcotp
&
npv to voo tp cto8Aptp. LpAop to
&a
cxvct otp tc0uvop vpp
tp
a
. Avtotpoqo, ov to cto8Aptp
b
cvot tnou poInter cv
string
, ttc xouc
npo8oop oto ncptcxcvo tp c tp xppop tou tcAcotp
*,
ootc to
*b
vo cntotpqct to
to to
string
, cvo to
b
vo tou vo cntotpqct tp tc0uvop vpp tou
string
.
string a(Hello), *b;
b = &a;
cout << a << endl;
cout << *b << endl;
Fto koAtcpp kotovpop okoAou0c to oxpottkp ovonopotoop tp vpp nou
kotovoAovouv to ovttkccvo out.
Ea
a = Hello
Zpctooct C++ ZcAo 7
3.EKcycvq pcq npcypd1c
Zc k0c npypoo cvot onopotpto vo cAyxouc tp pop tou ovoAyo knotc
ouv0pkc kot vo tpv ovokotcu0vouc kotAApAo. Ynpxouv noAAo tpnot vo
kotcu0vouc tp pop tou npoypoto kot o k0c vo cunppctc ouykckptvo
okon.
H cv 1c K q I f
H cvtoAp
if
xppotonotctot tov 0Aouc vo cktcAoouc knotc cvtoA vo tov
tkovonotctot knoto ouv0pkp:
if ()
{
}
else
{
}
;
;
|nopov vo ouvuootov noAA cvtoA
if
cto tou, no oto okAou0o
nopctyo:
if (x == 1) {
cout << x is one. << endl;
} else if (x == 2) {
cout << x is two. << endl;
} else if (x == 3) {
cout << x is three. << endl;
} else if (x == 4) {
cout << x is four. << endl;
} else {
cout << x is not between 1-4. << endl;
}
H cv 1c K q s w I t c h
H cvtoAp
switch
xppotonotctot tov xouc noAAonA cntAoy p tt yto to
cto8Aptp kot 0Aouc vo cktcAcotov toqopcttk cvtoA yto k0c ttp. |c tpv
switch
, to npopyocvo nopctyo 0o npct tp opqp:
switch (x) {
case 1;
cout << x is one. << endl;
break;
case 2;
cout << x is two. << endl;
break;
case 3:
cout << x is three. << endl;
break;
case 4:
cout << x is four. << endl;
break;
default:
cout << x is not between 1-4. << endl;
break;
}
Zpctooct C++ ZcAo 8
Bpoootc tpv xppop tp
break
. Xop tpv
break
p cktAcop tou npoypoto 0o
ouvcxoct xpt tpv cncvp
break
p xpt to tAo tp cvtoAp
switch
. Aut nopoc
vo to ckctoAcutoc ov 0Aouc kotvp ovttctontop optovov ncptntoocov.
switch (x) {
case 1;
case 2;
case 3;
case 4;
cout << x is between one and four. << endl;
break;
case 5;
case 6;
case 7;
case 8;
cout << x is between five and eight. << endl;
break;
default:
cout << x is not between one and eight. << endl;
break;
}
H cv 1c K q f o r
H cvtoAp
for
xppotonotctot yto cnovApqp (loop) un ouv0pkp knotov cvtoAov.
copctot oo p nto uvotp kot cuAtktp cvtoAp tnou
for
, oc onotopnotc yAoooo
(xct okpt8o tpv to Acttoupyo c tpv ovtototxp tp C).
H ovtop tp cvot p cp:
for ( ; ; ) {
;
}
H cvtoAp opxtkonopop (InItIalIzatIon) cktcActot otpv opxp tou loop kot otp ouvxcto
cAyxctot ov cvot oAp0p p qcup p ouv0pkp (condItIon). Av cvot oAp0p, cktcAovtot
ot cvtoA kot oto tAo cktcActot p cvtoAp cnovApqp (IteratIon) kot cAyxctot kot
nAt ov cvot oAp0p p ouv0pkp. Av cvot oAp0p cktcAovtot ot cvtoA, k.o.k.
Bopctyo:
for (int i = 1; i < 20; i += 3) {
cout << i << endl;
}
To onotAcoo 0o cvot to cp:
1
4
7
10
13
16
19
K0c o on tt cvtoA opxtkonopop, cnovApqp kot p ouv0pkp nopc vo
nopoActq0c oAAovto tp ouncptqop tp cvtoAp
for
. Zpctovouc tt xopovtot
cto tou c to cpotpottk '
;
'. Bopocyoto:
Zpctooct C++ ZcAo 9
int x = 10;
for (; x < 5; x++) {
cout << x << endl;
}
double y = 20000; // (y = pi)
for (; y >= 10.0;) {
// y
// y.
// for loop y 10.0
cout << y);
y = sqrt(y);
}
for (;;) { // infinite loop
wait_for_signal();
}
H cv 1c K q w h I I e
H cvtoAp
while
xppotonotctot ovt tp
for
tov c nopoc vo npo8Aqouc ckoAo
noc qop 0Aouc vo cktcAcotov ot cvtoA, p tov cv xct opooo o opt0 tov
cnovoApqcov oAA p tkovonotpop p xt tp ouv0pkp:
while () {
;
}
Bopctyo:
bool exit_from_loop = false;
while (exit_from_loop == false) {
//
read_bytes(file1);
//
write_bytes(file2);
if (file_empty(file1) == true)
exit_from_loop = true;
}
H cv 1c K q d o ] w h I I e
H cvtoAp
do/while
cvot nopoto c tpv
while
, c o toqop, ot cvtoA cvt tou
loop 0o cktcAcotov touAxtotov to qop ovcoptpto ov cvot oAp0p p ouv0pkp p
xt.
do {
;
} while ();
Bopctyo:
int x = 10;
do {
cout << x << endl;
x++;
} while (x <10);
To onotAcoo 0o cvot:
10
Zpctooct C++ ZcAo 10
Dt cvtoA oo oto loop 0o cktcAcotov tpv npotp qop okp kot ov cv toxct p
ouv0pkp (x 10).
0 i cv 1c K t b r e a k ] c o n t I n u e
BoAA qop 0Aouc vo tokqouc tpv cktAcop tov cvtoAov oc vo loop npv on
tp npoko0optovp ottyp. B.x. vo qyouc on vo InfInIte loop, p tov to npypoo
A8ct knoto opo (sIgnal) yto oo (n.x. ControlC).
for (int i = 1; i < 20; i += 3) {
if ( i*i > 100)
break;
cout << i << endl;
}
To onotAcoo 0o cvot:
1
4
7
10
H cvtoAp
break
xppotonotctot oc Ao to loops,
for
,
while
,
do/while
.
Avtototxp c tpv
break
cvot p
continue
, p onoo o tokntct tpv cktAcop vo
tou tpxovo IteratIon kot xt oAkAppou tou loop. Zuvcxct on to cncvo IteratIon.
Zto npopyocvo nopctyo:
for (int i = 1; i < 20; i++) {
// ()
if ( i % 2 == 0)
continue;
cout << i << endl;
}
To onotAcoo 0o cvot:
1
7
13
19
Zpctooct C++ ZcAo 11
4.CIasses
Class: "Car"
nstance of "Car"
Dbject:
AudI TT
nstance of "Car"
Dbject: Jaguar
XK8
nstance of "Car"
Dbject:
FerrarI |odena
nstance of "Car"
Dbject:
8ertona 8ella
H ovttkctcvootpoqp nAcup tp C++ qovctot c tpv xppop tov ovttkctvov kot tov
kAocov ott onoc ovpkouv to ovttkccvo. DAo to ovttkccvo nou xouv kotv
xopoktpptottk ovpkouv otpv to kAop kot k0c vo on out Ayctot tt cvot
"ottyttuno" (Instance) tp kAop. Fto nopctyo, p kAop "outokvpto" 0copc to
ycvtkp ctkvo tou outoktvptou c knoto xopoktpptottk nou unpxouv oc Ao to
ottyttuno. Zuykckptvo, p kAop outokvpto nt0ovo vo opct tt cvot tctptpoxo,
xct ttvt, toxtptc, ncvtA kot ko0ooto yto tou opyo oAA cv opct c
ooqpvcto to oxpo p tou pxovtoo Aov tov coptptov, otc to xopoktpptottk
tp pxovp (ku8tk, nnot, kAtvpot, kAn). Aut cvot xopoktpptottk nou oqopov to
k0c ovttkccvo cxoptot (p knoto unokotpyopo/unokAop tp kAop
"outokvpto"). Fto koAtcpp kotovpop, ctc to noponvo oxpo.
Ztp C++ p kAop pAovctot c tp Ap
class
. Zto nopctyo tou outoktvptou, oto
tt 0Aouc vo pAooouc to kAop c to voo Car:
class Car
{
(/)
(/)
};
(npootc to cpotpottk oto tAo tou optoo tp kAop!)
m e m b e r v a r I a b I e s
To xopoktpptottk tou ovttkctvou cvot to covo ypo on to onoo npnct vo
ovontouc to npypo o. Zto nopctyo c to outokvpto, to covo out
cvot p yovo otpqp tou ttovto, p ncop nou ookoc oto ncvtA, p 0op tou
oxAo toxutptov kot AAo. Ztov npoypootto, out to covo 0o npnct vo
ovtcAonotp0ov, pAop vo yvct p ovttototxo tou oc cto8Apt tt onoc nopoc
vo cnccpyootoc oto npypo o.
Zpctooct C++ ZcAo 12
Fto tpv kAop Car, nopoc vo xouc:
class Car
{
//
float steering_angle;
// (0 = , 100 = !)
float gas_pedal;
// (0 = , 100 = !)
float break_pedal;
// (0 = ,
// 100 = !)
float clutch;
// ( : 0, 1,2,3,4,5,
// 0 = , -1 = )
int gear;
// ,
//
float acceleration, speed, rpm;
}
Eo npnct vo opcto0c tt ot cto8Apt tp kAop xouv toqopcttk tt yto
k0c ovttkccvo, kot k0c ovttkccvo xct npo8oop vo ott tk tou cto8Apt.
Enop, o tno covov nou cntAx0pkc yto k0c cto8Aptp copttot on to co
tp nAppoqopo nou 0o kpotct outp p cto8Aptp. Fto nopctyo, cqoov p yovo
otpqp tou ttovto 0o cvot oc opc, cvot Aoytk vo xppotonotpoouc vo tno
nou 0o nopc vo kpotpoct ckotko opt0o, no o
float
.
Aut, Aotnv, cvot to covo o ooonotpvo un tpv vvoto tp kAop "Car".
Autp tp ottyp cv cvot tnotc noponvo on to oo cto8Aptov xop vo xouc
opoct tov tpno cnccpyooo tou. Ft' out cvot onopotptp p nopp tou kotAApAou
Interface tov covov c tov xppotp. To Interface cnttuyxvctot c tpv nopp tov
c0ov tp kAop (member methods).
m e m b e r m e t h o d s
Dt 0oot (methods) oc to kAop, cv cvot nop ouvoptpoct (unopoutvc) nou
npooqpouv npo8oop oto covo tou ckototc ovttkctvou tp kAop. H
oAApAcnpoop tou xppotp c k0c ovttkccvo yvctot oo tov c0ov tp kAop,
ot onoc ko0opouv kot tov tpno xctptoo tov cto8Aptov tou ovttkctvou. Zto
nopcty o, ot 0oot 0o ko0opouv c notov tpno 0o otp8ouc to ttvt, 0o
ouvouc tp to ykt p to qpvo, 0o oAAouc toxtptc oAA kot no 0o nopoc
vo yvopouc tpv toxtpto tou outoktvptou, tt otpoq tou ktvptppo pAop
nAppoqopc nou c nopoc vo cAyouc coo.
Zpctooct C++ ZcAo 1J
Bt0ov 0oot yto tpv kAop "Car" 0o nopooov vo cvot ot cp:
// , <relative_angle>
// .
void turn_wheel(float relative_angle);
//
void press_gas_pedal(float amount);
//
void press_break_pedal(float amount);
//
void press_clutch_pedal(float amount);
// . true
// false (.. 5 ).
bool change_gear(int new_gear);
// ,
//
float get_acceleration();
float get_speed();
float get_rpm();
Dt noponvo 0oot, nou kpvctot ovoykoo cntotpqouv knoto onotAcoo, ctc o
ckotk opt0 (
float
) otpv ncpntoop tov c0ov
get_*()
, p o
bool
otpv
change_gear()
. D tno
void
cvot cttkp ncpntoop nou cv cntotpqct knoto
onotAcoo. Xppotonotctot tov o cvtoqpct p cktAcop knoto totkooo xop
o vo cvot onopotpto vo yvopouc to onotAco tp, p nopc vo pv cntotpqct
knoto onotAcoo c' opxp.
Y K c n c qoq id c6 c u
Dt noponvo cvot onAo ot pAooct tov c0ov, pAop cv ncptxouv ko0Aou
kotko kot npnct vo tt ouncptAo8vouc otov opto tp kAop. Fto vo cvot
oAokAppovo o opto to c0ou 0o npnct vo ouvocctot kot on tpv
uAonopop tp (ImplementatIon). H uAonopop ouvtottot vo yvctot oc cxoptot
opxco (to ImplementatIon opxco, c kotApp .
cpp
) , yto nopctyo p uAonopop tp
turn_wheel()
0o nopooc vo cvot oto opxco
car.cpp
:
void Car::turn_wheel(float relative_angle)
{
steering_angle += relative_angle;
if (steering_angle <= -720.0)
steering_angle = -720.0;
if (steering_angle >= 720.0)
steering_angle = 720.0;
}
Dno 8Anouc otpv uAonopop tp c0ou npoo0ooc kot cntnAov kotko
ooqoAco, o onoo onoyopcct oto ttvt vo kvct ncptootcpc on 2 otpoq
optotcp p ct. Bopotot ncptoptoo oc vo kovovtk outokvpto yvovtot c
pxovtk tpno, oAA oc vo npypoo (n.x. coototp opypop), to k0c
ovttkccvo npnct vo 0oct tou tko tou ncptoptoo kot tkAcc ooqoAco c tp
opqp kotko ott c0ou.
Zpctooct C++ ZcAo 14
Ztp C++, ouvp0o p pAoop to kAop, cto8Aptp p ouvptpop yvctot oc
cxoptot opxco, to opxco kcqoAo tou onoou to voo Apyct oc
.h
p
.hpp
, cvo to
opxco optoo pAop to opxco nou ncptxct tov npyoo kotko optoo tp
ovtototxp kAop, cto8Aptp p ouvptpop Apyct oc
.cpp
p
.cxx
. LpAop yto tpv
kAop
Car
0o xouc o opxco, to opxco kcqoAo
Car.h
kot to opxco optoo
Car.cpp
. Aut o toxopto cunppctc tp yppyopp xppop tp kAop oo oc AAc
kAoct p ouvoptpoct, qoptovovto to opxco kcqoAo vo kot to8ovto tot
vo tt onopotptc nAppoqopc yto tpv xppop tp kAop, pAop tt pAooct tov
cto8Aptov kot tov c0ov nou ncptxct.
qic u p y d dv 1ikcit v v
txovto opoct tpv kAop o, 0o npnct vo ptoupypoouc to ovttkccvo/
ottyttuno (Instances) tp kAop. Ztp C++, nopoc vo ptoupypoouc ovttkccvo
c o tpnou, otottk kot uvotk. H otottkp ptoupyo yvctot no kot o opto
knoto cto8Aptp cvo p uvotkp yvctot c tp xppop tp cvtoAp
new
tp C++.
H
new
ptoupyc to quotkp ovonopotoop tp kAop, vo ovotk ottyttuno, kot
ov cvot cnttuxp cntotpqct vo cktp (poInter) oc out, toqopcttk cntotpqct
pv (0). |c out to cktp nopoc vo npooncAoouc to ovttkccvo c onoov
tpno 0Aouc (kot cqoov to cnttpnct to to to ovttkccvo). ttot yto tpv kAop
Car
p ptoupyo cv ovttkctvou otottk kot uvotk yvctot o cp (to ovttkccvo
acar
ptoupyctot otottk, cvo to
anothercar
ptoupyctot uvotk):
Car acar();
Car *anothercar = new Car();
Av o constructor cv nopvct nopotpou nopoc vo onoqyouc tt nopcv0oct,
pAop to okAou0o cvot toovoo:
Car acar;
Car *anothercar = new Car;
Doov oqop to ovttkccvo
anothercar
, p ptoupyo tou cv cvot ovoykoo vo yvct
kot tpv pAoop tou. To to onotAcoo nopoc vo xouc kot c tt cvtoA:
Car *anothercar;
anothercar = new Car;
To covo tou k0c ovttkctvou (ot cto8Apt) oAA kot ot 0oot tp kAop nou
ovttototxov oto ovttkccvo, nopov vo npooncAAootov o cp:
// acar
acar.steering_angle
// anothercar
anothercar->steering_angle
// acar 13.4 .
acar.turn(13.4);
// acar
float speed = acar.get_speed();
// anothercar 32
anothercar->turn(-32.0);
Zpctooct C++ ZcAo 15
// anthercar
bool result = anothercar->ghange_gear(-1);
Av p npoonAoop knotou ovttkctvou yvctot oo poInter ttc xppotonotoc tov
tcAcotp '
->
' (no n.x. kvouc c to uvotk ovttkccvo), toqopcttk
xppotonotoc tov tcAcotp '
.
'.
Dno 8Anouc optovot 0oot xovtot knotc nopotpou (cvt nopcv0ocov).
Dt nopctpot nopc vo cvot cto8Apt onotoupnotc onockto tnou otp C++ p
okp kot AAo ovttkccvo. Av xouc ncptootcpc on o nopotpou tt
toxopouc c ko '
,
'.
Co n s t r u c t o r s
Dtov ptoupyctot vo ovttkccvo (otottk p uvotk c tpv cvtoAp
new)
, otpv
npoyottktpto p C++, oqo cococt tpv onopotptp vpp yto to ovttkccvo,
cktcAc to ouykckptvp 0oo tp kAop, tov ptoupy (constructor). D
ptoupy npoyotonotc tt onopotptc cvpyctc yto vo kotootc knoto ovttkccvo
toto npo xppop. Aut nopc vo cvot ktt onA no p p0top knotov
cto8Aptov c opxtk tt, p nto ncpnAoko no p ptoupyo ovcop c to 8op
covov, p opxtkonopop tov ntvkov SQL, p ocuop knotov tktuokov 0upov
(sockets) yto knoto server p okp kot to votyo knotou nopo0pou yto cqvtop
ypoqtkp nAppoqopo.
D ptoupy xct tp opqp to c0ou c to voo tp kAop kot xop tno
(pAop cv pAovctot o tno covov nou cntotpqct, to onoo cvot toqopcttk
on to vo pAo0c o voId).
Fto nopctyo, otpv kAop "Car", vo nt0ov ptoupy nopc vo cvot:
Car::Car()
{
steering_wheel = 0.0;
gas_pedal = 0.0;
break_pedal = 0.0;
float clutch = 0.0;
int gear = 0;
acceleration = 0.0;
speed = 0.0;
rpm = 0.0;
}
LpAop, o ptoupy npoyotonotc tpv opxtkonopop (InItIalIzatIon) tov cto8Aptov
tou ovttkctvou ootc out vo cvot toto npo xppop.
|nopoc vo xouc ncptootcpou on vov ptoupyo, ot onoot vo xovtot
toqopcttk nopotpou o ko0vo.
Fto nopctyo, ov uno0oouc tt nopoooc vo opoouc xopoktpptottk tou
ktvptppo (
engine_cc
: ku8tk,
engine_hp
: nnot) otp ptoupyo tou ovttkctvou, 0o
nopoooc vo xouc vov cntnAov ptoupy:
Car::Car(int cc, int hp)
{
engine_cc = cc;
engine_hp = hp;
//
}
Zpctooct C++ ZcAo 16
cntnAov tou opxtko ptoupyo.
H ptoupyo ncptootcpov on vov ptoupyo koActot constructor overloadIng kot
cvot unoncpntoop tou xopoktpptottko tp C++, method overloadIng (oc cncvp
nopypoqo).
D e s t r u c t o r s
Ztp C++, ,tt ovttkccvo ptoupyoc uvotk npnct vo to kotootpqouc (ouvp0o
c tpv cvtoAp
delete
) cAcu0cpovovto Aou tou npou nou cocooc kot tpv
nopp tou (kAcoto opxcov, onoovcop on 8oct covov, tcpotto
threads, onoocuop vpp, kAn). H kotootpoqp tou ovttkctvou yvctot koAovto
to 0oo nou koActot kotootpoqo (destructor). To voo tou destructor cvot to
to c tp kAop nponopcucvo on tov tcAcotp
~
. LpAop yto tpv kAop
Car
, to
voo tou kotootpoqo cvot
~Car()
.
Evo o ptoupy cvot onopotpto vo optotc tt ncptootcpc qop, cv cvot nvto
onopotpto o opto tou kotootpoqo. Ktt ttoto xct vpo vo tov otov
ptoupy npoyotonotoc knoto uvotkp Acttoupyo (votyo tktuokp ovcop,
opxcou, kAn), kot tpv onoo npnct vo tcpotoouc kot tpv kotootpoqp tou
ovttkctvou (n.x. kAcoto opxcou, tcpotto ovcop, kAn).
0 c k1q dv d c p t h I s
|oo oc to 0oo, nopoc vo xppotonotpoouc to cto8Aptp tp kAop onAo
c to vo tp, ovoqcpcvot quotk otpv ttp nou xct p cto8Aptp yto to
ouykckptvo ovttkccvo. Tt ncptootcpc qop ktt ttoto cvot opkct, unpxouv
o kot ncptntooct nou xpctctot nto pptp ovoqop oto ouykckptvo ovttkccvo.
Fto to okon out nopoc vo xppotonotpoouc tp cto8Aptp
this
nou cntotpqct
nvto vo cktp oto tpxov ovttkccvo (pAop out nou koAc tpv 0oo). |c to
cktp
this
, p 0oo
turn_wheel()
nou coc noponvo ctooxpotctot o cp:
void turn_wheel(float relative_angle)
{
this->steering_angle += relative_angle;
if (this->steering_angle <= -720.0)
this->steering_angle = -720.0;
if (this->steering_angle >= 720.0)
this->steering_angle = 720.0;
}
D cktp
this
cvot ttotcpo xppoto cttk oc ncptntooct nou ctoxcptoootc
ncptootcpo on vo oto ovttkccvo otpv to 0oo, yto onoquyp oyxuop.
H e t h o d 0 v e r I o a d I n g
Zc vo npypoo, unpxct ncpntoop vo xpctootc vo cktcAoouc tpv to totkooo
c cAoqpo toqopcttk covo. Aut ouvp0o opovct tt 0o xpctootc vo xouc
toqopcttk ouvoptpoct/c0ou yto k0c toqopcttkp nopctpo nou vouc. Fto
nopctyo, o uno0oouc tt o xppotp koAc tpv 0oo
turn_wheel()
c
nopctpo vo
int
ovt yto
float
. Zc to yAoooo no p C 0o npcnc vo xouc o
ouvoptpoct/c0ou, to yto k0c toqopcttkp nopctpo kot Atoto c
toqopcttk voo:
void Car::turn_wheel_int(int relative_angle)
{
Zpctooct C++ ZcAo 17
this->steering_angle += (float) relative_angle;
if (this->steering_angle <= -720.0)
this->steering_angle = -720.0;
if (this->steering_angle >= 720.0)
this->steering_angle = 720.0;
}
void Car::turn_wheel_float(float relative_angle)
{
steering_angle += relative_angle;
if (steering_angle <= -720.0)
steering_angle = -720.0;
if (steering_angle >= 720.0)
steering_angle = 720.0;
}
Ouotk, to ouykckptvo nopctyo cvot opkct onA kot cv onotcAc np8Apo.
|nopoc Atoto vo tpononotpoouc tpv
turn_wheel_int()
o cp:
void Car::turn_wheel_int(int relative_angle)
{
turn_wheel_float((float) relative_angle);
}
Ztpv npoyottktpto, ov xouc knoto nto ncpnAoko npypoo c cptk ckc
nopoAAoy c0ov kot knotc xtAtc ypo kotko, p noponvo tcxvtkp
uokoAcct to debuggIng, npokoAc tnAootoo tou kotko kot uoxcpovct tp
ouvtpppop tou npoypoto. Ztpv ncpntoop outp cnt8AActot p xppop to Dbject
DrIented yAooo no p Java p p C++ nou nopxouv uvottptc |ethod DverloadIng.
H tcxvtkp tou method overloadIng, cnttpnct tov opto tqopov nopoAAoyov to
c0ou ovoAyo tt ptocvc nopotpou nou xctot outp. To noponvo
nopctyo, 0o ctooxpottotc otpv cp opqp:
void Car::turn_wheel(float relative_angle)
{
steering_angle += relative_angle;
if (steering_angle <= -720.0)
steering_angle = -720.0;
if (steering_angle >= 720.0)
steering_angle = 720.0;
}
void Car::turn_wheel(int relative_angle)
{
turn_wheel((float) relative_angle);
}
To voo tp c0ou nopovct
turn_wheel()
kot nopoc vo xouc oc
nopoAAoy 0Aouc oov oqop to co kot to nAp0o tov nopotpov nou xctot.
Bop' A' out, o tno covov nou cntotpqct p 0oo (p
void
ov cv cntotpqct
ktt) 0o npnct vo cvot o to oc k0c nopoAAoyp tp c0ou.
Zpctooct C++ ZcAo 18
5.EninKtcv Tnci cctvv
R v dkc
Av kot xouc pp ovoqpct tou opovttktcpou tnou covov otp C++ oc
npopyocvp nopypoqo, oqpooc oknto tpv ovoqop otou nvokc. tvo Ayo
cvot tt otp C++, ot nvokc uAonotovtot ctc o nopoootoko nvokc (no otp C)
ctc o ovttkccvo.
Dt nvokc ycvtk xppotonotovtot yto tpv opyvoop kot kotoxoppop otov
ovttkctvov. |nopov vo cvot o p noAAov tootocov kot o tpno npoonAoop
tov ototxcov cvot o to c outv tp C.
Ztp C++ nopoc vo opoouc vo ovotototo nvoko noA onA o cp:
type table[size];
0
type
0copoc tov tno covov tov ovttkctvov tou nvoko kot nopc vo cvot
ctc vo on tou onAo tnou (
bool
,
char
,
short
,
int
,
long
,
float
,
double
,
char
) ctc to voo to kAop ovttkctvov. To
size
onctkovct to yc0o tou
nvoko
table
.
Dno kot otp C, nopoc vo npooncAAoouc to ototxco tou nvoko c tpv ovtop
table[i]
, nou
i
p 0op tou ototxcou nou o cvtoqpct. Eo npnct vo opcto0c
tt oc ovttototxo c tp C p C++ npoyotonotc tpv op0pop tov ntvkov on to pv
(
0
) o to
size-1
. LpAop ov xouc vov nvoko
A
c 10 ototxco to npoto ototxco
cvot to
A[0]
kot to tcAcutoo to
A[9]
.
Zpctovctot tt cvo otp Java ot nvokc cvot npoyottk ovttkccvo kot to yc0o
cv nvoko

vctot on tp cto8Aptp
.length
, otp C++ cv unpxct ttoto
uvottpto kot to yc0o to Ao8vouc c tp xppop tp ouvptpop
sizeof()
. H to
o cntotpqct to yc0o oc bytes kot xt oc ototxco tou nvoko. AkoAou0c vo
nopctyo yto koAtcpp kotovpop:
int data[10];
int datasize = sizeof(data) / sizeof(int);
int i;
cout << Size of array data: << sizeof(data) / sizeof(int) << endl;
for (i = 0; i < datasize; i++) {
data[i] = i*i;
cout << data[ << i << ] = << data[i] << endl;
}
To onotAcoo tou kotko outo 0o cvot:
Size of array data: 10
data[0] = 0
data[1] = 1
data[2] = 4
data[3] = 9
data[4] = 16
data[5] = 25
data[6] = 36
data[7] = 49
data[8] = 64
data[9] = 81
Zc ncpntoop nou 0Aouc vo opxtkonotpoouc vo nvoko, pAop vo opoouc
opxtk tt yto to ototxco tou, out nopoc vo to nctxouc c tpv cp
Zpctooct C++ ZcAo 19
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
ouvtokttkp op:
int dataset[] = { 22, 3, 54, 43, 199, 20, 20, 67, 7, 80 };
R c K u io1d1c i n v dkc
Lc 0o ptov nAppp p unootpptp tov ntvkov oc to yAoooo npoypoottoo no p
C++, ov outp cv unootpptc noAutototou nvokc.
Fto nopctyo, vo totototo nvoko nopc vo pAo0c o cp:
int twodim[4][4];
int arraysize = 4;
int i, j, counter = 1;
for (i = 0; i < arraysize; i++) {
for (j = 0; j < arraysize; j++) {
twodim[i][j] = counter;
counter++;
cout << twodim[i][j] << ;
}
cout << endl;
}
To onotAcoo outo tou kotko 0o cvot:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Lptoupypooc tot vov totototo nvoko, tou onoou to ototxco to
npooncAAouc no cxvct to oxpo:
twodIm[1][2]
twodIm[J][1]
R cp ioo 1cp d yid 1d 5 t r I n g s
To strIngs to xouc pp ovoqpct kot to xppotonotpooc cptk qop otpv cvtoAp
cout.
Avt0cto c to strIngs oc AAc yAoooc npoypoottoo (C, PASCAL) nou cvot
onAo nvokc xopoktppov, otp C++ to strIngs cvot kovovtk ovttkccvo, nou
uAonotovtot c tpv kAop
string
(oto namespace
std
). Ouotk, yto Ayou
ou8ottpto c tp C, unpxct nAppp unootpptp tov strIngs un tpv opqp ntvkov
xopoktppov (
char *
p
char []
).
Bpo on tpv oncu0co xppop tou nou coc otpv
cout
, nopoc vo
ptoupypoouc ovttkccvo
string
, c tov to tpno no kot c k0c AAo
ovttkccvo, pAop otottk p uvotk (c tp xppop tp
new
).
std::string str(Hello);
std::string str2 = there;
std::string *str3 = new std::string(Hello there);
Zpctooct C++ ZcAo 20
cout << str << str2 << endl;
cout << *str2 << endl;
H kAop
string
nopxct optovc c0ou, ot onoc cvot opkct xppotc yto
cnccpyooo tou kctvou oo oto
string
. Bopo0touc tt opovttktcpc on out
otov okAou0o nvoko:
Dvoa Asttoupya
bool empty()
Entotpqct
true
ov to ovttkccvo
string
cvot kcv.
int length()
Entotpqct to pko (oc xopoktppc) tou
string
.
reference operator[](int
index)
Entotpqct vo cktp ovoqop (reference) otov
xopoktppo nou 8pokctot otp 0op
index
tou
string
.
int compare(string &str)
Zuykpvct o ovttkccvo
string
. Av to koAv
ovttkccvo (pA. out nou koAc tpv
compare()
) cvot
tkptcpo on to
str
, ttc cntotpqct opvpttk
onotAcoo, pv ov xouv to to ncptcxcvo, p
0cttk onotAcoo ov to koAv
sttring
cvot
cyoAtcpo on to
str
.
int find(string &str)
Avopt to
str
oo oto koAv ovttkccvo
string
.
Av 8pc0c cntotpqct tp 0op tp npotp cqvtop
tou, oAAto
-1
.
int find_last_of(string str)
Avopt to
str
oo oto koAv ovttkccvo
string
.
Av 8pc0c cntotpqct tp 0op tp tcAcutoo
cqvtop tou, oAAto
-1
.
AkoAou0c vo nopctyo xppop tov strIngs:
string str1(Hello there, from C++!);
string str2 = One two three four;
string str3 = C++ strings are cool!;
string *str4 = new string(str3);
int index, result;
cout << str1 is << str1.length() << characters long.);
for (int i=0; i < str1.length(); i++)
cout << str1[i] << |;
cout << endl;
if (str3 == *str4)
cout << str3 == str4 << endl;
else
cout << str3 != str4 << endl;
if (str3 == str2)
cout << str3 == str2 << endl;
else
cout << str3 != str2 << endl;
result = str3.compare(str1);
if (result < 0)
cout << str3 < str1 << endl;
else if (result == 0)
cout << str3 == str1 << endl;
Zpctooct C++ ZcAo 21
else
cout << str3 > str1 << endl;
index = str1.find(C++);
if (index != -1)
cout << 'C++' exists in str1 in position << index << endl;
else
cout << 'C++' does not exist in str1 << endl;
index = str2.find(C++);
if (index != -1)
cout << 'C++' exists in str2 in position << index << endl;
else
cout << 'C++' does not exist in str2 << endl;
index = str3.find(C++);
if (index != -1)
cout << 'C++' exists in str3 in position << index << endl;
else
cout << 'C++' does not exist in str3 << endl;
To onotAcoo tou kotko outo 0o cvot:
str1 is 22 characters long.
H|e|l|l|o| |t|h|e|r|e|,| |f|r|o|m| |C|+|+|!|
str3 == str4
str3 != str2
str3 < str1
'C++' exists in str1 in position 18
'C++' does not exist in str2
'C++' exists in str3 in position 0
Zpctooct C++ ZcAo 22
6.Kd1dokcucv1d tvd npypdd
Zto opco out xouc opoct to ncptootcpo on to 8ootk cpyoAco yto vo ypqouc
vo nAppc npypoo oc C++. Lcv xouc ovoqpct o tp op cv npoypoto,
tov tno opxcov nou 0o xppotonotp0ov p no 0o to ctoyAottoouc kot
cktcAoouc.
H p c u 1 v d m a I n { )
Ztp C kot otp C++, k0c npypoo cktv tpv cktAcop tou on tpv poutvo
main()
. H
poutvo outp nopc vo 8pokctot oc onotopnotc opxco npyoou kotko tou
npoypot o, oAA nopc vo cvot vo o yto k0c cktcAoto npypoo. Zc
ovt0cop c tp Java, cv onotcAc po to kAop oAA cvot outvop poutvo. To
okAou0o cvot to nto onA nopctyo npoypoto C++:
#include <iostream>
int main(int argc, char *argv[]) {
std::cout << hello everyone << std::endl;
}
|c tpv cvtoAp
#include
ctoyouc tpv kcqoAo nou pAovctot p xppop tov 8ootkov
stream ctoou kot cou tp C++, tov
cin
,
cout
kot
cerr
ovtototxo (ncptootcpo oc
cncvp cvtpto). H kcqoAo outp cvot p
iostream
.
Doov oqop tpv
int
ovoqpctot oto tt p poutvo
main()
cntotpqct oto Acttoupytk
ootpo vov kotk cnttuxo p onotuxo cktAcop tou npoypoto. Zc Ao to
Acttoupytk ouotpoto kot yto Ayou ou8ottpto, o kotk out cvot pv (0)
yto cnttuxp cktAcop tou npoypoto kot p pcvtk (5, 10, p AAo) oc ncpntoop
cAcyxcvou tcpottoo tou npoypoto n.x ytot cv cxc opkctp vpp p
tkotooto cyypoqp oc knoto opxco, cvo o kotk out onokt cyAp ttp tov
to npypoo tcpotoct ontoo Ayo oqAoto (crash).
Dt nopctpot
argc
,
argv
noouv to pAo tp nopotpou
args[]
otp Java. LpAop
ncptxouv tt nopotpou c tt onoc koActot to npypoo on tpv ypop
cvtoAov. D Ayo nou xouc o nopotpou cvot tt vo nvoko otp C/C++ cv
nopxct knoto ckoAo tpno nAppoqppop tou cy0ou tou. ttot cvo o nvoko
argv[]
ncptxct tt nopotpou oc strIngs tp C (okoAou0c xopoktppov
char
kot xt
ovttkccvo
string
), cv cvot uvot vo yvopouc to nAp0o outov tov nopotpov
xop tpv
argc
. Zc cncvp nopypoqo okoAou0c nopctyo xppop tov
argc
,
argv
.
To
cout
to xouc pp c opkct qop oc npopyocvo nopocyoto, cvot to
stream nou ovttototxc otp nptunp oo (standard output) nou tunovovtot to
pvoto (tpv to Acttoupyo oc AAc yAoooc xouv cvtoA no
print
,
printf
,
write
, kAn). Bcptootcpo yto to streams otp C++ 0o oc oc cncvp cvtpto. To
endl
ou8oAct to xopoktppo vo ypop (new lIne) kot xct okpt8o tpv to
Acttoupyo c tpv cktnoop tou xopoktppo "
\n
" (yto tpv okp8cto kvct kot flush to
stream cou).
o nopotpppootc oo tt to
cout
kot to
endl
xouv to np0co
std
c tnA vo kot
kto tcAcc "
::
". To np0co out ou8oAct to namespace oto onoo ovpkct to
ovttkccvo stream
cout
kot to
endl
, pAop otpv ouoo to nco toxo tou. Av o
kotk o ovpkc oto to namespace
std
, c 0o ptov ovoykoo p xppop tou
npo0oto "
std::
", oAA to ouykckptvo namespace cvot pp ko0optovo kot cv
ouvtottot p tpononopop p npoo0pkp AAov kAocov p ovttkctvov. Dnotopnotc
Zpctooct C++ ZcAo 2J
xppop ovttkctvou ckt knotou namespace onottc to np0co tou ovoto tou
namespace (otpv npokctvp ncpntoop to
std
) okoAou0ocvo on '
::
'. EvoAAokttk,
0o nopoooc vo xppotonotpoouc otpv opxp tou npoypoto (ckt tp poutvo
main()
) tpv cvtoAp
using namespace std;
ootc vo ctooxpottotc to npypo o oto cp:
using namespace std;
#include <iostream>
int main(int argc, char *argv[]) {
cout << hello everyone << endl;
}
To o npoypoto cvot onoAto toovoo.
0 i n dp c1p c i 1q m a I n { )
Dno ovoqpoc oc npopyocvp cvtpto, p
main()
xctot knotc nopotpou
argc
kot
argv[]
. LpAop, cnttpnct oto npypo o vo nopoctponotc tpv pop
tou c 8op knotc cntAoy tou xppotp otp ypop cvtoAov (0DS/Command Prompt
oto WIndows, shell oto LInux).
AkoAou0c vo onA nopctyo nou onAo tunovct tt nopotpou nou ncpvc oto
npypoo:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
for (int i=0; i < argc; i++)
cout << argv[i] << endl;
}
Aut to ono0pkcouc o
ArgsExample.cpp
kot noA onA to ctoyAottouc. To
onotAcoo 0o cvot vo cktcAoto opxco
ArgsExample
, to onoo cktcAoc vovto
tou knotc nopotpou:
C:\> ArgsExample hello mate what's up?
ArgsExample
hello
mate
what's up?
To npypoo xtpkc toocpt nopotpou (
ArgsExample
,
hello
,
mate
kot
what's
up?
) tt onoc tunovct o oc k0c ypop. Zc ovt0cop c tp Java, otp C/C++ p
npotp nopctpo (
argv[0]
) cvot nvto to voo tou npoypoto nou cktcActot.
Eo opctovouc tt ot nopctpot ycvtk xopovtot c kcvo xopoktppc (space,
tab) ckt ov ncptkAcovtot ovcoo oc ctooyoytk

, ontc 0copovtot kot ot kcvo
xopoktppc po tp nopotpou (no kot c tp nopctpo
what's up?
nto
nvo).
Zpctooct C++ ZcAo 24
7.Rpcpqtvd 6td1d
E n c a p s u I a t I o n
A opoouc to kAop Person p onoo 0o ncptxct optovc nAppoqopc yto vo
too, no n.x. to vo tou, tpv pAtko tou, to tpAqov tou kot tp tc0uvop emaIl
tou. |to ttoto kAop nopc vo xppotonotp0c n.x. oc vo npypoo otvto p
okp kot o 8op oc npypoo ncAotoAoyou, oo0cvov, kAn.
class Person
{
public:
//
string Firstname_, Lastname_;
int Age_;
string Telephone_;
string Email_;
// constructor
Person(string fname, string lname, int age, string tel,
string email)
{
Firstname_ = fname;
Lastname_ = lname;
Age_ = age;
Telephone_ = tel;
Email_ = email;
}
}
Joo nopotpppootc tt to ovoto tov cto8Aptov tp kAop Apyouv oc "_". Ouotk,
ktt ttoto cv cvot ovoykoo, cvot o to ouvp0tovp npokttkp kot 8op0ct otpv
ovoyvoptop kot toxopto tov onAov cto8Aptov on tt cto8Apt Ap to
kAop.
Aqo opooc tpv kAop, nopoc vo npoxoppoouc otpv ptoupyo knotov
ovttkctvov tp kAop:
Person bilbo(Bilbo, Baggins, 111, +306970123456,
bilbobaggins@theshire.net);
|c outv tov tpno, ptoupypooc to ovttkccvo
bilbo
nou ovttototxc oto too
8Ilbo 8aggIns, 111 ctov c tpA. J0697012J456 kot emaIl bIlbobaggIns@theshIre.net.
Dno cvot ot nAppoqopc nou ncptypqouv to too cvot npoo8otc oc Aou.
Aut opovct tt ov c knotov tpno onoktpoouc npo8oop oto ovttkccvo
bilbo
,
0o nopoc vo oAAouc onotopnotc nAppoqopo 0cApoouc kot c onotovpnotc
tpno. LpAop, vo ooouc to p ykupp tc0uvop emaIl oto nco
email_
p to
oxctp nAppoqopo oto nco
telephone_
. Kot Atoto c noA onA tpno:
bilbo.Firstname_ = ;
bilbo.Lastname_ = ;
bilbo.Age_ = 3;
bilbo.Email_ = this is definitely not a valid email address;
bilbo.Telephone_ = yeah, try to call this;
Bpkcttot yto tpovp nopo8oop tov npooontkov covov!!!
Bo nopoc vo onoqyouc ttotou cou p npo8Acncvp ctotponp tov
Zpctooct C++ ZcAo 25
covov cv ovttkctvou;
H C++ ko0o kot ot ncptootcpc yAoooc npoypoottoo nou xouv oxctootc ypo
on to ovtAo tou ovttkctcvootpoqo npoypoottoo, npo8Anouv tov
ncptopto tp npo8oop tov covov oc cnnco. tvo on to cnnco npo8oop
cvot p npo8oop xop ncptopto oc Aou, nou opctot c tp Ap
public
.
Akpt8otcpo, p
public
opct to ncptoxp pAooco c0ov p cto8Aptov
(ycvtktcpo Ap tp kAop). K0c Ao nou 8pokctot otpv ncptoxp publIc 0o cvot
npoo8oto on onoupnotc oo otpv to kAop p ckt tp kAop. To ovtotpoqo,
pAop o ncptopto tp npo8oop yvctot c tp xppop tp Ap
private
. H
private
ncptopct tpv npo8oop tov cto8Aptov p tov c0ov nou 8pokovtot otpv
ovtototxp ncptoxp, vo otpv ouykckptvp kAop (kot quotk oc ovttkccvo outp).
Dnotopnotc npo8oop ckt, 0o onotpnctot oto cnnco tp ctoyAotttop okp.
Fto nopctyo p noponvo kAop
Person
, c tp xppop tp
private
, 0o
ctooxpottotc o cp:
class Person
{
private:
//
private string Firstname_, Lastname_;
private int Age_;
private string Telephone_;
private string Email_;
public:
...
Aut o opovct tt cv 0o cvot nAov uvotp p npo8oop oc onotopnotc
nAppoqopo tou otou okp kot yto onAp ovyvoop! Ktt ttoto cv cvot cnt0upt
kot npnct vo 8pc0c tpno vo cnttponc oto kot cAcyxcvp npo8oop oto covo.
Akpt8o, out cnttuyxvouc c tpv xppop tov c0ov tp kAop. EAcyxcvp
npo8oop yto ovyvoop oAA kot ctotponp tov covov. Zuvp0o kot yto tt
ncptootcpc ncptntooct kAocov, opkc o opto cv uyou c0ov yto k0c
cto8Aptp tp kAop, o yto ovyvoop kot to yto ctotponp tp ttp tp
cto8Aptp (vo cyo getter/setter no Ayovtot ouxv).
Fto nopctyo, yto tpv kAop
Person
nopo0touc nt0ov c0ou get/set yto
optovc on tt cto8Apt (
Age_
kot
Email_
):
// Return the age
int Person::getAge()
{
return Age_;
}
// return the Email address
string Person::getEmail()
{
return Email_;
}
// method to set the age of the person
bool Person::setAge(int Age)
{
// check if given Age is non-negative (> 0)
if (Age > 0)
{
Zpctooct C++ ZcAo 26
Age_ = Age;
return true;
} else
return false;
}
// method to set the email address
bool Person::setEmail(string Email)
{
// call a helper method to check the validity of the email
// address (if it's in the form x@y.z).
// Ideally, the email address should be a class on its own.
if (isValid(Email) == true)
{
Email_ = Email;
return true;
} else
return false;
}
8Anouc no cAyxctot nAov p npo8oop ott cto8Apt. H cto8Aptp nou kpot tp
tc0uvop emaIl tou otou, yto nopctyo, oAAct vo ov xouc ooct to ykupp
tc0uvop emaIl (tp opqp x@y.z).
|c tov to tpno nou ncptopouc tpv npo8oop oc cto8Apt nopoc vo
ncptopoouc tpv npo8oop kot oc c0ou. o nopoooc n.x. vo xouc to 0oo
nou vo cAyxct ov o opt0 tpAcqovou tou otou cvot ykupo, npoyotonotovto
ovoptpop oc knoto 8op covov. Dnoopnotc, to ttoto 0oo cv 0o 0Aoc
vo cvot npoo8otp on onotovpnotc ckt tp kAop, nop vo oc AAc c0ou
tp to tp kAop (n.x. otpv 0oo
setTelephone()
).
I n h e r I t a n c e
H kAppovotktpto cvot vo okp xopoktpptottk tou ovttkctcvootpoqo
npoypoottoo. Bpokttk, to kAop kAppovoc to xopoktpptottk to unpxouoo
kAop kot npoo0tct kotvopto p tpononotc to pp unpxovto.
Fto koAtcpp kotovpop tp vvoto, 0o xppotonotpoouc to nopctyo tp kAop
Person
tp npopyocvp cvtpto. H kAop
Person
opct xopoktpptottk nou
ncptypqouv vo too oAA cv npo8Anct cntnAov nAppoqopc, no n.x. to qAo,
t ouAct kvct to too kot tp tc0uvop cpyooo tou, ov xct ktvpt tpAqovo, ov
cvot novtpcvo/p c nott kAn. To np8Apo cvot tt cv nopoc vo
npo8Aqouc Ac tt nt0ov nAppoqopc kot vo tt ctoyouc otpv kAop
Person
ytot ot ncptootcpc 0o cvov ovonvtptc kot ktt ttoto 0o opyooc oc onotAp
xopou (oqo 0o npcnc vo kotoxoppoouc Ac tt nAppoqopc nou 0o ptov kcv).
EntnAov, 0o ptov ckvcuptottk kot koupoottk yto to xppotp vo npnct vo ctoyct
xppotc nAppoqopc. Av knoto cv cpyctot cv xct vopo vo tou ptc to
voo tp cttktpt tou kot tc0uvop/tpAqovo tp cpyooo tou, ooot;
Ktt noA nto xppoto cvot vo xouc to kotvp 8op kot vo kpotc cntnAov
nAppoqopc vo tov tt xpctoootc. toto tt p kotvp 8op cvot p kAop
Person
kot 0Aouc vo cActpoouc tt ncptntooct vo cvot knoto unAApAo (Clerk) p
okoAo (Teacher). Kot ot o kotpyopc otov otpovtot kotv xopoktpptottk
nou 0copoc tt ncptxovtot otpv kAop
Person
. |nopoc pAop vo opoouc o
vc kAoct nou 0o kAppovoov tpv kAop
Person
. H pAoop tp kAppovotktpto
to kAop yvctot o cp (opouc toutxpovo kot tpv npo8oop ott cto8Apt
Zpctooct C++ ZcAo 27
kot tov ptoupy tp kAop):
class Clerk : public Person
{
private:
string JobTitle_;
string CompanyName_;
string JobAddress_;
string JobEmail_;
string JobTel_;
string JobFax_;
string JobDescription_;
public:
Clerk(string fname, string lname, int age, string tel,
string email, string jobtitle, string companyname,
string jobaddress, string jobemail,
string jobtel, string jobfax,
string jobdescription)
{
Firstname_ = fname;
Lastname_ = lname;
Age_ = age;
Telephone_ = tel;
Email_ = email;
JobTitle_ = jobtitle;
CompanyName_ = companyname;
JobAddress_ = jobaddress;
JobEmail_ = jobemail;
JobTel_ = jobtel;
JobFax = jobfax;
JobDescription_ = jobdescription;
}
// get/set
// ...
...
//
// .
string getInfo() {
return (getFirstname()+ +getLastname()
+ works at +CompanyName_
+, at +JobAddress_
+.\n Email: +getEmail()+\n
+Tel: +JobTel_);
}
}
Avtototxo, opouc tpv kAop
Teacher
:
class Teacher : public Person
{
private:
string Title_;
string School_;
string SchoolAddress_;
string SchoolTel_;
string CourseName_;
string CourseDescription_;
public:
Teacher(string fname, string lname, int age, string tel,
string email, string title, string school,
string schooladdress, string schooltel,
Zpctooct C++ ZcAo 28
string coursename, string coursedescription)
{
Firstname_ = fname;
Lastname_ = lname;
Age_ = age;
Telephone_ = tel;
Email_ = email;
Title_ = title;
School_ = school;
SchoolAddress_ = schooladdress;
SchoolTel_ = jobtel;
CourseName_ = coursename;
CourseDescription_ = coursedescription;
}
// get/set
// ...
...
//
// .
string getInfo() {
return (getFirstname()+ +getLastname()
+ teaches +CourseName_+ at +School_
+, +SchoolAddress_+.\n
+Email: +getEmail()+\n
+Tel: +SchoolTel_);
}
}
Bpootc tt xppotonotpooc tt c0ou
get()
tp kAop
Person
yto tpv npo8oop
ott cto8Apt tp (cqoov cvot pAovc
private
). uouc tt ov to cto8Aptp
p 0oo cvot pAovp
private
, cvot npoo8otp vo on c0ou tp to tp
kAop. Lcv cvot npoo8otp on tt c0ou to unokAop outp.
Bo o qovctot p xppottpto outp tp kotookcup; Lctc to okAou0o nopctyo
kotko nou xppotonotoc kot tt tpct kAoct:
Person bilbo(Bilbo, Baggins, 111, +306970123456,
bilbobaggins@theshire.net);
Clerk sam( Samwise, Gamgee, 33, +30697654321,
samgamgee@theshire.net,
Gardener, Baggins Inc.,
Bag End, Hobbiton, The Shire,
gardener@baggins.com,
+302103456789, +302103456780,
Garden Dept. Director);
Teacher pippin( Peregrin, Took, 27, +30690090090,
pippin@theshire.net, Dr.,
King's College, Hobbiton,
+30210000001, Philosophy,
Deal with the important matters of life, eg. what do we
eat?);
|nopoc noA ckoAo vo xppotonotpoouc yto k0c vo on out to ovttkccvo,
npo on tt c0ou tp kAop otpv onoo ovpkct, kot tt c0ou tp yovtkp
kAop (pAop tpv kAop tp onoo to xopoktpptottk kAppovoc):
cout << bilbo has email address: << bilbo.getEmail()) << endl;
outp p cvtoAp 0o tunooct:
Zpctooct C++ ZcAo 29
bilbo has email address: bilbobaggins@shire.net
Evo p cvtoAp:
cout << sam works as a << sam.getJobTitle() << at
<< sam.getCompanyame()) << endl;
0o tunooct:
sam works as a Gardener at Baggins Inc.
BopAApAo, p cvtoAp:
cout << pippin teaches << pippin.getCourseName() << at
<< pippin.getSchool()) << endl;
0o tunooct:
pippin teaches Philosophy at King's College
TAo, ot cvtoA:
cout << sam's private telephone is << sam.getTel() << endl;
cout << pippin is << pippin.getAge() << years old << endl;
0o tunooouv:
sam's private telephone is +30697654321
pippin is 27 years old
KoAooc pAop c0ou tp kAop
Person
kot on to tpo ovttkccvo!!! Autp cvot
p ouoo tp kAppovotktpto tov kAocov! Ktt ttoto o cnttpnct vo
cnovoxppotonotoc kotko nou xouc ypqct noAottcpo, onAo cncktcvovt tov
no o 8oAcct k0c qop (code reuscblty). txovto pAop cptk kAoct c
optovo vo to 8ootk xopoktpptottk, nopoc ovoAyo to npypoo nou
npnct vo uAonotpoouc vo npoo0oouc p vo tpononotpoouc xopoktpptottk kot
8oApop, ootc vo cnttxouc to cnt0upt onotAcoo.
P o I y m o r p h I s m kdi V I r t u a I H e t h o d s
T yvctot o ov 0Aouc vo oAAouc tp Acttoupyo to c0ou otpv vo kAop
nou unpxct kot otpv noAt; Zto npopyocvo nopctyo, p vc kAoct opouv to
0oo tpv
getInfo()
, p onoo cntotpqct nAppoqopc yto tov unAApAo p tov
okoAo ovtototxo. Dno cvot pAovp, p k0c kAop npooqpct tp tkp tp ckoxp
oAA p opxtkp
Person
, cv xct optovp to ttoto 0oo
getInfo()
.
Av p
getInfo()
optotc kot yto tpv kAop
Person
, n.x. o cp:
string Person::getInfo() {
return (getFirstname()+ +getLastname()
+is +getAge()+ years old);
}
ttc ptoupyctot to cp cpotpo: noto ckoxp tp
getInfo()
0o koActot yto k0c
ovttkccvo;
Ztp ouykckptvp ncpntoop 0o cvot ovotp p ctoyAotttop tov kAocov
Clerk
kot
Teacher
. H C++ (ovt0cto c tp Java), cv cnttpnct to overrIde tov c0ov xop
cttkp cto. H cto outp vctot c tp Ap
virtual
, pAop p 0oo opctot o
uvpttkp, kot o opto tp 0o ctotponc o cp:
Zpctooct C++ ZcAo J0
cvvotov/kAocov/c0ov ott onoc 0o
ovoAyo tt ovykc o.
To okAou0o nopctyo xct okon vo
virtual string getInfo() {
return (getFirstname()+ +getLastname()
+is +getAge()+ years old);
}
|c tpv oAAoyp outp, 0o koActot k0c qop p
getInfo()
tp kAop nou ovpkct to
ovttkccvo on to onoo koAoc tpv 0oo.
Fto nopctyo, o okAou0o kotko:
cout << bilbo.getInfo() << endl;
cout << sam.getInfo() << endl;
cout << pippin.getInfo() << endl;
0o nopyct
Bilbo Baggins is 111 years old
Samwise Gamgee works at Baggins Inc., at Bag End, Hobbiton, The Shire.
Email: gardener@baggins.com
Tel: +302103456789
Peregrin Took teaches Philosophy at King's College, Hobbiton.
Email: pippin@theshire.net
Tel: +30210000001
Tt okpt8o ytvc co; KoAooc tpv to 0oo kot yto to tpo ovttkccvo (tpv
getInfo()
) p onoo o opctot kot ott tpct kAoct. H yovtkp kAop
Person
opct
tpv
getInfo()
c vov onA tpno ("
Bilbo Baggins is 111 years old
") kot p to
0o xppotonotovtov ott kAoct
Clerk
kot
Teacher
ov cv opovtov kot ckc.
LpAop, ov cv opoc tpv
getInfo()
otpv kAop
Clerk
, p
getInfo()
yto to
ovttkccvo
sam
0o cnotpcqc "
Samwise Gamgee is 33 year old
". Enctp o p
kAop
Clerk
ncptxct ncptootcpc nAppoqopc nou npnct vo onctkovtotov c tpv
getInfo()
, p tcAcutoo cnovoopotpkc, onoktovto vo Acttoupyo.
H tcxvtkp outp koActot Method Dverrdny kot cvot to 0ccAtoc xopoktpptottk tou
noAuopqtoo. H kAoct ott onoc opouc vIrtual methods Ayovtot vIrtual (vIrtual
classes). Zpctovouc kot nAt tt cvot onopotptp p xppop tp Ap vIrtual otov
opto tp c0ou.
D noAuopqto o vct tp uvottpto ptoupyo oqpppvov
koAAc k0c qop tp oootp uAonopop
cct no okpt8o xppotonotoc tov
noAuopqto. copoc to ovttkccvo nou xouc opoct nptv (
bilbo
,
sam
,
pippin
).
Person* who[3];
who[0] = &bilbo;
who[1] = &sam;
who[2] = &pippin;
for (int i=0; i < who.length; i++)
cout << who[i]->getInfo() << endl;
To noponvo nopctyo 0o tunooct ,tt kot to npopyocvo vo nou topo
xppotonotpooc vov nvoko ovttkctvov
Person
yto vo opyovooouc tpv
nAppoqopo. AAA to ovttkccvo
sam
cvot tnou
Clerk
kot to
pippin
ovpkct otpv
kAop
Teacher
. Bo to kotoxoppooc otov nvoko
who
; H onvtpop 8pokctot otpv
oxop nou xouv ot kAoct
Person
,
Clerk
kot
Teacher
cto tou. tvo ovttkccvo
Clerk
cvot toutxpovo kot ovttkccvo
Person
, no kot vo ovttkccvo
Teacher
cvot
cnop
Person
. tvo
Clerk
cv cvot o toutxpovo
Teacher
. ttot nopoc vo to
Zpctooct C++ ZcAo J1
ovttctonouc kot 8oApop o
Clerk
kot
Teacher
p
Person
, ovoAyo tt ovykc
o. Akp o kot ov to npooncAoouc o
Person
, p
getInfo()
tou ko0cv 0o
cvot outp nou opct p kAop tou.
T yvctot o ov xpctctot vo koAoouc kot tpv yovtkp 0oo (pAop outp nou
cnovoopouc otp vo kAop); Ztpv ncpntoop outp xppotonotoc tpv ovoqop otp
yovtkp kAop koAovto tov ptoupy tp. tvo nopctyo cvot ovoykoo yto
koAtcpp kotovpop. |ctooxpotouc to ptoupy kot tp 0oo
getInfo()
tp
kAop
Teacher
oto cp:
Teacher(string fname, string lname, int age, string tel,
string email, string title, string school,
string schooladdress, string schooltel,
string coursename, string coursedescription)
{
Person(fname, lname, age, tel, email);
Title_ = title;
School_ = school;
SchoolAddress_ = schooladdress;
SchoolTel_ = jobtel;
CourseName_ = coursename;
CourseDescription_ = coursedescription;
}
string getInfo() {
return (Person.getInfo()
+ and teaches +CourseName_+ at +School_
+, +SchoolAddress_+.\n
+Email: +getEmail()+\n
+Tel: +SchoolTel_);
}
|c outv tov tpno otov ptoupy opkc nAov vo opxtkonotoc (InItIalIze) vo to
xopoktpptottk nou cvot vo otpv kAop xop vo kvouc tnA kno nou xct pp
yvct otpv yovtkp kAop. Enop, otpv
getInfo()
, xppotonotoc tpv nAppoqopo nou
cntotpqctot on tp yovtkp kAop kot ounAppovouc c to vo ototxco. Av n.x.
oAAoc to kccvo nou cntotpqct p
getInfo()
tp kAop
Person
, 0o AAoc
outoto kot to kccvo nou cnotpcqc p
getInfo()
tp kAop
Teacher
, cqoov
xppotonotoc tpv ovoqop otp kAop
Person.
.
Zpctovouc tt method overrIdIng xouc vo tov p pAoop tp c0ou cvot p to
otp yovtkp kot otpv 0uyotptkp kAop. LpAop to voo, cntotpcqcvo covo kot
nopotpou. Av vo on out cvot toqopcttk (ckt on to voo quotk) ttc
xouc uncpqptoop c0ou (method overloadIng) nou to xouc pp ovoAoct oc
npopyocvp cvtpto.
P u r e V I r t u a I CI a s s e s
|cptk qop nopc vo 0Aouc vo opoouc onAo to ycvtkp op knotov
kAocov, xop o vo npooqpouc to okpt8p uAonopop. LpAop, vo opoouc to
"oqpppvp" kAop, nou vo nopxct onAo vo nAooto nou 0o ounAppovouv ot
0uyotptk kAoct oo tp tcxvtkp method overrIdIng. Aut opovct tt otov opto
tp kAop onAo 0o pAovovtot optovc 0oot o "oqpppvc" oAA cv 0o
nopxctot knoto opto yt' out. Ztp C++ ot kAoct out koAovtot pure vIrtual
cvo otp Java koAovtot abstract.
tvo kAoootk nopctyo oqpppvp kAop cvot p kAop tou outoktvptou. D
pxovto nou oAAct toxtptc oc k0c outokvpto cvot toqopcttk kot toqpct
Zpctooct C++ ZcAo J2
ovcoo otou kotookcuoot kot oto tqopo ovtAo. Do o tpno
oAApAcnpoop (pAop oo tou oxAo toxutptov) cvot koA optovo oto kot c
knoto ncpt0opto nopoAAoyov. D tpno optoo tp kAop yvctot o cp:
class Car {
...
// . true
// false (.. 5 ).
virtual bool change_gear(int new_gear) = 0;
...
}
class FerrariModena extends Car {
...
bool change_gear(int new_gear) {
//
}
...
}
Zpctooct C++ ZcAo JJ
8.Apcd kdi 5treams
To opxco oc k0c unoAoytotp cv cvot nop okoAou0c xopoktppov. Aut nou
oAAct otov npoypootto cvot o tpno xctptoo tou kot out c tp octp tou
copttot on tp yAoooo npoypoottoo, ot 8t8Ato0pkc nou xppotonotoc ko0o
kot on to to to Acttoupytk ootpo. B.x. oto 8eDS to opxco 0copovtot
ovttkccvo nou to to npooqpouv tt c0ou c tt onoc 0o to npooncAoouc.
Bopoootok, p C npooqpct optovc o covov
FILE
(struct, o npyovo tp
kAop) kot ovcptptc ouvoptpoct nou xouv npo8oop oto opxco. H Ap
totkooo tou npoypoottoo yvctot c poInters ott o
FILE
kot cvot opkct
ckoAo vo yvct knoto A0o kot tp xppop tou. EntnAov c npooqpouv koo on
tt cukoAc tou ovttkctcvootpoqo npoypoottoo (kAppovotktpto,
noAuopqto, kAn). Htov ovoykoo knoto cvoAAokttk npoypootto opxcov,
xppotonotovo ovttkccvo.
Fto to okon out p C++, uto0tpoc tp xppop tov streams. ttot cv nopxctot
oncu0co npo8oop tov covov tov opxcov, nop vo o ovtoAAoyp bytes on
to npypoo npo to opxco kot ovtotpoqo. H xppop tov streams o po covov
on kot npo to opxco, xct to coo qcAo tt cv cvot nAov opovttk to oov
oto onoo 8pokctot to opxco oAA vo p cvoAAoyp tp nAppoqopo on kot np to
npypoo.
Dt kAoct ot onoc o cvtoqpouv oc out to opco cvot p
fstream
kot ot nto
ouykckptvc
ifstream
,
ofstream
. Dno oo xctc kotoA8ct, p
ifstream
ovoqpctot oto votyo opxcou vo yto ovyvoop (Input fIle stream), cvo p
ofstream
xppotonotctot vo yto cyypoqp oto opxco (output fIle stream). H
fstream
npooqpct toutxpovo uvottpto yto ovyvoop kot cyypoqp.
H kK oq f s t r e a m
H kAop
fstream
(nou pAovctot oto ovtototxo opxco kcqoAo), npooqpct opkct
c0ou yto ovyvoop, cyypoqp kot ctokvpop oto opxco ko0o kot opkct flags yto
tpononopop tov covov kot tpv cyypoqp p tpv ovyvoop. AkoAou0ov cptk
on tt opovttktcpc 0oot:
Dvoa Asttoupya
bool good()
bool bad()
H
good()
cntotpqct
true
ov to opxco cvot oc koAp
kototoop (ov cv xct ou8c knoto oqAo
ctoou/cou) p
false
toqopcttk. H
bad()
xct
tpv ovt0ctp ouncptqop.
bool eof()
Entotpqct
true
ov xouc qtoct oto tAo tou
opxcou kot tpv ovyvoop.
void flush()
Ano0pkcct Ac tt oAAoy nou xouv yvct oto
opxco kot cv 8pokovtot otou buffers tou
ouotpoto.
int get() Entotpqct tov cncvo xopoktppo tou opxcou.
istream &getline(char *buf,
int num)
Avttypqct on to opxco oto nvoko xopoktppov
buf
, to ytoto
num
xopoktppc ckt ov qtoct oto
tAo tp ypop p tou opxcou. Entotpqct to
ovoqop oto opxco.
Zpctooct C++ ZcAo J4
Dvoa Asttoupya
int gcount()
Entotpqct tov opt0 tov xopoktppov nou
ovoyvootpkov kot tpv npopyocvp cktAcop tov
c0ov
get()
,
read()
.
istream &read(char *buf, int
num)
Avttypqct on to opxco oto nvoko xopoktppov
buf, to ytoto
num
xopoktppc ckt ov qtoct oto
tAo tou opxcou.Entotpqct to ovoqop oto
opxco.
ostream &write(char *buf, int
num)
Avttypqct on to nvoko xopoktppov
buf
oto
opxco, to ytoto
num
xopoktppc. Entotpqct to
ovoqop oto opxco.
void seekg(int offset,
origin)
void seekp(int offset,
origin)
Dpct tp tpxouoo 0op tou poo yto ovyvoop
(
seekg
) p yto cyypoqp (
seekp
). To streams otp C++
xppotonotov o toqopcttko cktc, vo yto
ovyvoop covov kot vo yto cyypoqp.
int tellg()
int tellp()
Entotpqct tpv ovtototxp 0op tou poo yto
ovyvoop (
tellg
) p yto cyypoqp (
tellp
).
Fto tpv koAtcpp kotovpop tov c0ov tp
fstream
nopo0touc vo onA
nopctyo cv npoypoto ovttypoqp o opxcov, oc o ckox: o otpv
onoo p ovttypoqp yvctot ov xopoktppo (byte) kot o ctcpp nou ovttypqovtot
blocks tov 256K8 k0c qop.
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
// 3 .
// C++ argv[0]
// .
if (argc != 3) {
cout << "Usage: CopyFile <from> <to>" << endl;
return 0;
}
// <from> (
// argv[1]).
//
// .
ifstream fin(argv[1]);
if (fin == 0) {
cout << "Error: Input file cannot be opened for reading!" << endl;
return 10;
}
// <to> (
// argv[2]).
//
// .
ofstream fout(argv[2]);
if (fout == 0) {
Zpctooct C++ ZcAo J5
cout << "Error: Output file cannot be opened for writing!" << endl;
return 10;
}
// ,
// seekg() tellg(). seekg() ,
// tellg() .
// (cursor)
// offset 0 (ios::end)
// tellg(). .
fin.seekg(0, ios::end);
size_t finsize = fin.tellg();
cout << "Input file size: " << finsize << endl;
// ,
// , offset 0 bytes ios::beg).
fin.seekg(0, ios::beg);
// fin fout.
// byte byte
int c;
int percent = 0;
while (fin.eof() == false) { // ;
c = fin.get(); // byte
if (fin.eof() == false) //
fout.put(c); // byte
cout << "Copy Completed : " << 100*percent/finsize << "\r";
percent++;
}
fin.close();
fout.close();
return 0;
}
H ovttypoqp cv opxco ncpnou 40|8 tppkcoc 20 cutcpAcnto. Dxt ttotcpo
yppyopo. |c to tkpp oAAoyp otov kotko 0o couc no p to totkooo nopc vo
topkoct At 4 cutcpAcnto otov to unoAoytotp kot yto to to opxco!
Zuykckptvo 0o oAAouc tov kotk tou 8pxou whIle:
// fin fout.
// block
size_t bufsize = 262144; // block
char buf[bufsize]; // buffer bytes
int count; // bytes
int total = 0;
while (fin.eof() == false) { // ;
fin.read(buf, bufsize); // bufsize bytes
count = fin.gcount(); //
if (count) // 1 byte
fout.write(buf,count); // fout
cout << "Copy Completed : " << 100*total/finsize << "\r";
total += count;
}
0 i 1cK co1t < < , > >
Bpo on tt c0ou, p
fstream
npooqpct vov noA cxppoto tpno ovtoAAoyp
covov c to opxco, oo tov tcAcotov
<<
kot
>>
nou pAovouv tpv kotc0uvop
Zpctooct C++ ZcAo J6
on (
>>
) kot npo (
<<
) to opxco. Tou tcAcot tou xouc pp xppotonotpoct
opkct qop c tpv nptunp oo (kovoAo)
cout
. Aut toxct ytot kot p
cout
cvot
vo npoko0optovo ovttkccvo
ostream
(p yovtkp kAop tp
ofstream
) nou
ovttototxc otpv nptunp oo (
stdout
). Avtototxo p nptunp cooo
cin
cvot vo
istream
(p yovtkp kAop tp
ifstream
) nou vct npo8oop otpv
stdin
, kot p nptunp
oo Ao0ov
cerr
nou ovttototxc otpv
stderr
.
D tpno xppop tov tcAcotov cvot noA onA. toto
fin
,
fout
o ovttkccvo
ifstream
kot
ofstream
ovtototxo:
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream fin("data.txt");
if (fin == 0) {
cout << "Error: could not open file data.txt" << endl;
return 10;
}
ofstream fout("output.txt");
if (fout == 0) {
cout << "Error: could not open file output.txt" << endl;
return 10;
}
// .
string name;
double age;
//
while (fin.eof() == false) {
//
fin >> name >> age;
if (fin.eof() == false) {
//
cout << " " << name << " " << age << " ." << endl;
// output.txt
fout << " " << name << " " << age << " ." << endl;
}
}
}
Av to opxco
data.txt
xct n.x. to cp covo:
29.7
34.4
6.5
803.4
To onotAcoo tou npoypoto 0o ono0pkcutc oto opxco
output.txt
kot 0o cvot:
29.7 .
34.4 .
6.5 .
803.4 .
Zpctooct C++ ZcAo J7
5 t r I n g s t r e a m s
Ztp yAoooo C, no oo yvopctc, p opqonopop cv strIng oo nopotpov
yvctot c tpv cvtoAp
sprintf
, nou Acttoupyc c tov to tpno no p
printf
yto tpv
nptunp oo (
stdout
) p p
fprintf
yto tpv oo oc opxco. Avtototxo, p Acttoupyo
tov streams kot p cukoAo tov tcAcotov
<<
kot
>>
nopxctot otp C++ kot yto strIngs. Fto
to okon out xct uAonotp0c p kAop
stringstream
(oto opxco kcqoAo
sstream
),
kot xppotonotctot no okpt8o vo
fstream
. Bopo0touc to okAou0o nopctyo
yto koAtcpp kotovpop:
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main() {
stringstream formatted;
// .
int data[] = {10, 5, 4, 3, 8, 11};
string names[] = {"one", "two", "three", "four", "five", "six"};
for (int i=0; i < 6; i++) {
formatted << "Name: " << names[i] << ", value: " << data[i] << endl;
}
cout << formatted.str();
}
To onotAcoo tou npoypoto outo cvot to cp:
Name: one, value: 10
Name: two, value: 5
Name: three, value: 4
Name: four, value: 3
Name: five, value: 8
Name: six, value: 11
Zpctovouc tt out tunovctot vo on tpv tcAcutoo cvtoAp:
cout << formatted.str();
H 0oo
str()
tou
stringstream
"noyovct" to ncptcxcv tou kot cntotpqct vo
ovttkccvo
string
to onoo nopoc vo tunooouc. Lcv cvot onockt vo
tunooouc vo ovttkccvo
stringstream
oncu0co.
Zpctooct C++ ZcAo J8
9.Td np1und {tempIates)
To nptuno (templates) cvot vo on to nto uvot xopoktpptottk tp C++, to onoo
onotcAc tp 8op tp STL(tpv onoo 0o oc nopokto), ko0o cnttpnouv tp xppop
noAuopqtoo kot tp ctoyAotttop (compIletIme) ovt kot tpv cktAcop (run
tIme), ycyov nou ouvct kot noA tpv onoop tou, oqo o ctoyAotttotp
nopc vo npoyotonotpoct opkct 8cAttotonotpoct kot tpv ctoyAotttop.
Bptuno nopov vo optotov yto ouvoptpoct p yto kAooct. H Acttoupyo cvot p
to, c tp toqop tt ov optotc to kAop nptuno, p npotunonopop toxct yto k0c
0oo/ouvptpop tp kAop.
Botov okpt8o okon o cunppctov to nptuno; Av oc knoto npypoo
xpctoootc tpv totvpop o toqopcttkov ouvAov covov (n.x. vo nvoko
on
int
kot vo nvoko on
string
) 0o xpctootoc o ouvoptpoct nou 0o
npoyotonotpoouv tpv totvpop otou nvokc. Ktt ttoto cvot ncpttt, cntppcn
oc A0p kot otto opop tou cy0ou tou npoypoto. Av to npypoo ccAtx0c
vo unootppct kot AAou tnou covov, okp kot kAoct, 0o xpctootoc to
ouvptpop totvpop yto k0c tno! Dnoopnotc npnct vo unpxct to koAtcpp
Aop.
H Aop cvot vo optotc vo nAooto, p nptuno, to onoo 0o ncptypqct tov oAypt0o,
xppotonotovto to oqpppvp kAop, o tno tp onoo c o cvtoqpct nop
vo optovo xopoktpptottk nou cvot onopotpto. B.x. yto tp totvpop
xpctoootc onAo to 0oo oykptop ovcoo oc o tuxoo ovttkccvo.
H pAoop cv ttotou nAotoou yvctot c tpv ApkAct
template
okoAou0ocvp
on to voo tp oqpppvp kAop kActovp oc
<>
.
Fto tpv koAtcpp kotovpop tov npotnov okoAou0c vo onA nopctyo to
kAop Aoto ovttkctvov (otqopo t cou):
#include <iostream>
using namespace std;
// list template
// data_t ( ,
// ).
template<class data_t> class list {
// item data_t
data_t item;
// next
//
list *next;
public:
// ( data_t)
list(data_t d);
//
// add()
void add(list *node) {
node->next = this;
return;
}
Zpctooct C++ ZcAo J9
// get_next()
list *get_next() {
return next;
}
// get_data item.
// (.. char data_t
// char, string, .
data_t get_data() {
return item;
}
};
// ,
// .
// template brackets <data_t>
//
template<class data_t> list<data_t>::list(data_t d) {
// item d
item = d;
// (
next = 0;
}
int main() {
// list.
// data_t char
list<char> start('a');
// (pointers)
list<char> *p, *last;
// last
// ,
last = &start;
for (int i=1; i < 26; i++) {
//
// 'a' + i.
// ( new.
p = new list<char>('a' +i);
// .
p->add(last);
// .
// .
last = p;
}
//
p = &start;
while (p) {
// ( get_next()
// ,
// .
cout << p->get_data() << ", ";
// .
p = p->get_next();
}
cout << endl;
Zpctooct C++ ZcAo 40
return 0;
}
To npypoo out 0o tunooct to cp onotAcoo.
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z,
Zpctovouc kot nAt tt otpv kAop
list,
cnctp outp cvot templated, nopc vo
xppotonotp0c kot onotopnotc AAp kAop ckt tp
char
.
5 t a n d a r d T e m p I a t e L I b r a r y { 5 T L )
H 8t8Ato0pkp STL cvot vo ovoAo on totc kAoct kot ouvoptpoct ycvtkp xppop
nou yAutovouv opovttk xpvo on to npoypoottotp ko0o npooqpouv vov
ckoAo tpno vo ovttctontotov to ncptootcpo 0oto ycvtkp qoco oc vo
npypoo. ttot o npoypoottotp xct nAov tp uvottpto vo ooxoAp0c c tpv
ouoo tou npo8Apot tou, nop c to noto poutvo 0o xppotonotpoct yto vo
totvopoct vo nvoko on strIngs.
Fcvtk p STL onotcActot on tpct kotpyopc kAocov kot c0ov: tou contaIners,
tou oAypt0ou kot tou Iterators. Aut ouvovtot cto tou c ttoto tpno ootc
vo cnttpnctot p ckoAp ovttctontop to nAp0opo npo8Aptov tov onoov p
cnAuop cvot onopotptp yto tov npoypoottotp oAA cvot onAo Acntopctc otpv
ouvoAtkp ctkvo cv npoypoto (n.x. totvpop ototxcov).
0 i kK oci c o n t a I n e r s
Dt contaIners cvot ovttkccvo nou xppotonotovtot o "oxco" yto AAo ovttkccvo
(onotoupnotc cou) kot npooqpouv ouykckptvo xopoktpptottk oov oqop to
tpno npo8oop tov ovttkctvov, tov tpno ono0pkcuop tov ovttkctvov otp
vpp, tpv ovttotoxtop ovttkctvov oc "kActt" (oxcotoko contaIners), kAn. Dt
8ootko contaIners cvot ot
vector
,
list
,
queue
,
stack
kot
set
, cvo opovtot kot ot
oxcotoko contaIners ot
map
,
multimap
.
Dt contaIners cnctp cvot 8ootovot oto nptuno, nopov vo ncptxouv ovttkccvo
onotoopnotc kAop.
0 i t 6 c c i a I g o r I t h m s
Dt contaIners on vot tou c 0o ptov ttotcpo xppotot, xt ncptootcpo on tpv
cxoptotp uAonopop knotou npoypoottotp. Aut nou kvct tpv STL vo
onoctkvctot ocnpooto cpyoAco cvot o ouvuoo tov contaIners c tou
oAypt0ou (algorIthms). Dt oAypt0ot cvot onAo 0oot nou xouv oxctootc vo
Acttoupyov nvo oto ovttkccvo nou ncptxovtot otou contaIners, xop o vo
onottov knoto ouykckptvo tno, vo knoto ycvtk xopoktpptottk. B.x. yto vo
totvopoouc to ovttkccvo cv contaIner, cv cvot ovykp vo onottpoouc o
contaIner vo ncptxct strIng, onAo vo opctot p npp tp oykptop yto to
ovttkccvo out (pAop ot tcAcot
<
,
==
,
>
).
H STL npooqpct totou oAypt0ou yto noAA totkooc, no totvpop (
sort
,
stable_sort
), ovttypoqp ovttkctvov on tov contaIner c p xop ouv0pkp nou
npnct vo nAppotot (
copy
,
copy_backward
,
unique_copy
,
unique_copy_if
), opto
knoto ttp oto ovttkccvo (
fill
,
fill_n
), cpcop ovttkctvov oto contaIner
(
find
,
find_end
,
find_first_of
,
find_if
), kototppop ovttkctvov c p xop
ouv0pkp (
count
,
count_if
), cktAcop knoto poutvo yto ouykckptvo ovttkccvo
Zpctooct C++ ZcAo 41
(
for_each
,
transform
), npct ouvAov (
set_union
,
set_intersection
), cpcop
cyotov kot cAoxotov (
max_element
,
min_element
), toypoqp p ovttkototoop
ovttkctvov oto contaIner c p xop ouv0pkp kot c p xop ovttypoqp oc vo
contaIner (
remove
,
remove_if
,
remove_copy
,
remove_copy_if
,
replace
,
replace_if
,
replace_copy
,
replace_copy_if
), kot noAAo AAot okp.
0 i c k1c I t e r a t o r s
K0c oAypt0o xctot to opxtk kot to tcAtk ovttkccvo tou contaIner oto onoo 0o
npoyotonotp0c p cpyooo o nopotpou. To ovttkccvo out vovtot o Iterators,
to tcAtk ototxco tp STL yto vo oAokAppo0c o cpyoAco. Bpokttk ot Iterators cvot
poInters oAA c knoto ttotcpp ouncptqop, n.x. unpxouv forward kot backward
Iterators yto ctokvpop oto ovttkccvo cv contaIner vo npo tp o kotc0uvop,
Input kot output Iterators yto xppop oc streams kAn. Lc 0o ovoqcp0oc ncptootcpo
otpv uAonopop tou p oc npoxoppvp xppop tou, to nopctyo nou okoAou0c
xppotonotc tou nto ouxvo Iterators oc k0c contaIner, nou unoctkvouv tpv opxp
kot to tAo tou contaIner (
begin()
kot
end()
).
0 c o n t a I n e r v e c t o r
To nopv kccvo cvot onAo ctooyoytk kot cv onookonc oc covtApttkp ovAuop
tp STL. o nopouotoouc to on tt cvctkttk xppoct tou contaIner
vector
.
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
// std:: ...
using namespace std;
// Person ,
// . ,
// public.
class Person {
public:
// string, age
string name_;
int age_;
// constructor
//
Person(string n, int a) {
name_ = n;
age_ = a;
}
};
// main()
int main() {
// vector Person
// (addressbook)
vector<Person> addressbook;
// input age.
// const linesize "" (constant)
// .
Zpctooct C++ ZcAo 42
const int linesize = 100;
char input[linesize];
int age;
// 10 (, )
for (int i=0; i < 5; i++) {
// getline()
// ,
// input.
cout << "Enter name: ";
cin.getline(input, linesize);
// .
// getline , >> cin.
cout << "Enter age: ";
cin >> age;
// :
// * Person
// (input)
// age.
// constructor Person(input, age).
// *
// vector<Person> addressbook.
// push_back().
addressbook.push_back(Person(input, age));
//
// newline '\n', cin >> age
// .
// loop. (
//
//
// ...
cin.getline(input, linesize);
}
//
ofstream fout("address.txt");
if (fout == 0) {
cout << "Error! cannot open file address.txt" << endl;
return 10;
}
// addressbook
// fout. for. size()
// addressbook () vector.
cout << "Writing results to file address.txt" << endl;
for (int j=0; j < addressbook.size(); j++) {
fout << addressbook[j].name_ << " is "
<< addressbook[j].age_ << " years old" << endl;
}
//
fout.close();
return 0;
}
To npypoo out ov to koAoouc kot ooouc tt cp tt:
Enter name: Kostas
Zpctooct C++ ZcAo 4J
Enter age: 29
Enter name: Nikos
Enter age: 33
Enter name: Myrsini
Enter age: 27
Enter name: Bilbo
Enter age: 22
Enter name: Gimli
Enter age: 27
0o ptoupypoct to opxco
address.txt
nou ncptxct to cp covo:
Kostas is 29 years old
Nikos is 33 years old
Myrsini is 27 years old
Bilbo is 22 years old
Gimli is 27 years old
Zpctooct C++ ZcAo 44
i K ic yp d d
C/C++ Programmer's Feference, Jrd EdItIon, SCHL0T H., DS8DFNE, S8N 0072227222
H yAoooo npoypoottoo C++, 8JAFNE STFDUSTFUP, KActpt0o, S8N 960JJ21427,
1200 ocA.
C++: a 8egInner's CuIde, SCHL0T, DS8DFNE, S8N 0072194677
ThInkIng In C++ 7ol 1, 8ruce Eckel, PFENTSH HALL, S8N 01J9798099 (onlIne)
ThInkIng In C++ 7ol 2, 8ruce Eckel, PFENTSH HALL, S8N 01J0J5J1J2 (onlIne)
Zpctooct C++ ZcAo 45

You might also like