Professional Documents
Culture Documents
s asszociativitsa
A tblzatban elbb opertorok magasabb precedencival rendelkeznek, mint a k-
felbukkank. A C+ + szablyai szerint egy kifejezs zrjeln bell tallhat
a program az opertorok precedencijnak sorrendjben vgzi el gy, hogy
a legmagasabb rang opertorral hajtj a vgre majd sor-
rend szerint folytatja. tv. egyoperandus plusz (+) s minusz (-) a precedencia-lista maso-
dik szintjn szerepelnek. vagyis - teljesen logikusan - az aritmet ikai
ket, amelyek az ldik szinten kaptak helyet. A msodik szinten tallhat & opertor a "c-
me" opertor, mg a g, szinten lthat ugyanilyen jel a bitenknt i AND opertora,
A 2, szinten lthat " a mutat ltal cfmzett tartalom kiolvasst vgzi, mg a 4. szinten lt
hat ugyanilyen jel a szorzs, Amennyiben a vgrehajtsnak sorrendjre nem
utalnak zrj elek, gy az azonos precedenciaszinthez tartoz a program jobbrl
balra. vagy balrl jobbra haladva hajtja vgre a tblzatban megadott nak megfelelen,
Szint Opertorok Kirtkelsi sorrend
1 (magas) ( ) :: balrl jobbra
2 [ l -> ++ -- balrl jobbra
typei d keyword, typecast
3 * & ! - + ... -- ... - jobbrl balra
aizeof new delete
4
* ->*
balrl jobbra
5
/%
balrl jobbra
6
, -
balrl jobbra
)
balrl jobbra
8 < <= > >= balrl jobbra
9 ='" I ", balrl jobbra
10
balrl jobbra
11 balrl jobbra
12 balrl jobbra
13
balrl jobbra
14
"
balrl jobbra
15
? ,
jobbrl balra
16 = *= /= ... = -= %= jobbrl balra
=;&=A=I=
ACsaC+ +
kulcsszavai
Kulcsszavak
and' (&&) false'
and_e,,' (&,, ) float
.,m
'0"
auto friend'
bitand' (&) goto
bitor' ( I)
"
bool' inl ine'
break
'ne
case long
catch' mut able'
char namespace
class' new'
campl ' (-) not ' (l)
const not,eq' ( I,,)
const, cast ' operator'
continue or' (I I )
default or, eq' (I ,, )
delete' private'
do protected'
double public'
dynarnic, caet' register
else reinter-
on=
pret, cast'
explidt' return
export' short
extern eigned
, Csak a C++ nyelvnek rsze,
s izeof
size, t
static
statiC, cast'
struct
switch
template'
this'
throw'
true'
try'
typedef
typeid'
typename'
union
unsigned
us!ng'
virtual'
void
volatUe'
wchar, t
while
xor' (A)
xor, eq' (A;; )
17 throw
18 (alacsony) , operator)
balrl jobbra
balrl iobbra
Azok a kulcsszavak, amelyek utn zrjel szerepel,
a zrjelben tallhat opertor szinonimi.
Adattpusok a C+ + nyelvben
TIpus 16 bit 32 bit Tartomnv
uneigned short int 2 bjtos 2 bjtos O-tl 65 535-ig
short int 2 bjtos 2 bjtos -32 768-t6l32 767-ig
uneiqned long int 4 bjtos 4 bjtos O-tl 4294967 295-ig
long int 4 bjtos 4 bjtos -2147483 648-t612147 483647-ig
int 2 bjtoe 4 bjtos (16) :-32768- tI32767 - ig;
(32) :-2147483 64 8- tl 2147483 647 - ig
unsigned int 2 bjtoe 4 bjtos (16) : O- t165 535 - ig; (32) : Q-tl 4 294 967295-ig
s i ze_ t 2 bjtoe 4 bjtos (16) : 0 - t165 535 - ig; (32) : Q- tl 4 29 4 9672 95 - ig
char 1 bjtoe l bjtos 256 karak ter
wchar_t 2 bjtoe 2 bjtos 65535 karakter
bool l bjtos 1 bj tos Tr u e vagy False
float 4 bj t os 4 b jtoe 1, 2*10>1
t13,4"10" ig
double 8 bjtos 8 b jtoe 2, 2 *10-"'- tl 1, 8*10'''- i g
l ong d ouble 10 bjt o s 10 bjtos 3 , 4 *10"" -t6l l, l *10"" -ig
TARTALOMJEGYZK
I. rsz
l. ra
Bevezets a C+ + programozsi nyelvbe
lpsek
a programozshoz ....... .
A C++ nyelvjrsai (C++, ANSI C++, ISO C++ s a Windows)
A fordt teleptse s belltsa
Telepts a CD-r61 . , ................ .
A Borland C++BuilderX fordt belltsa ...... .
Fordt.'s a Borland C++BuilderX-szel
A fordtprogram s a
Fordts s linkels
3
.4
.5
. ..... 6
.. 6
..... 8
..... 9
......... 10
.10 Fordts az integrlt krnyezetben
linkels .......... . .......... 11
A fejlesztsi ciklus. , ..
HELLO.CPP - Az els6 C++ programunk
Fordtsi hibk ...... .
Krdsek s vlaszok
Gyakorlatok
Kvz
Feladalok
Vlaszok a kvzkrdsekre .
2. ra Egy C++ program rszei
lehet j vlaszts a C++ nyelv.
Procedurlis, strukturlt s objektum-kzpont programfejleszts .
. ..... II
13
15
16
16
17
17
17
. 19
21
A C++ rwelv s az objekmm-kzpont programozs . 22
Begyazs (encapsulation) . . . . . . . . . . . . . . . . . . . .. . ......... .. .... 23
s jrahasznosts .................... . . ....
Tbbalaksg (polimorfizmus) .... . .. . . .. . . . ..
. 24
Egy egyszeru program rszei .......... .
. 24
Az #indudc utasts viz.<;glala .... . .. . . . . . . . . . 25
Elemzs soronknt. . ... 26
Megjegyzsek ................................ 28
A megjegyzsek tipusai ................... .. ... ..... .. . . ... 28
Megjegyzsek hasznlata egy programban . 29
iv I Tanuljuk meg a C++ programozsi nyelvet 24 ra alatt
Fgg"nyek . . . . . . . . . . . . . . . . . . . . ............... 30
Fggvnybvsok . . . ........ . .. . . . ....... 31
Fggvnyek hasznlata ....... . ........ ............ . 32
Fggvnyparamterek hasznlata . . . . . . . . . . . . . . . . . . .. . 33
Krdsek s vlaszok . . . . . . . . .. 34
Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3S
Kviz ..
Gyakorlatok
Vlaszok a kvrzkrdsekre
... 35
... 35
... 35
3. ra Vltozk s llandk
Mi az a vltoz? . . . . . . . . . . . . . . . . . . 37
Mem6riafoglals .. . ... , . . . . .. .... . . , . . 38
A'L. egt:s'L. szmok (Integer) mrete . . . . . . . . . . . . . . . .... 39
signed s unsigned ........ ... . . . . . . . . . . . . . . . . . . . . . 40
l a p v e t vltoz6lpusok .......... . . . . . . . . . . . . . . . . 41
Egy v{lltoz meghatrozsa . . . . . . . . . . . . . .... 42
A kis- s nagyl>culk eltr6 jelemsr61 . . . . . . . . . . . . . . . . . . . , 42
Kulcsszavak. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... 43
Egynl tbb vltoz megadsa egyszerre ................. .. . . .... 44
rtC:kck hozz rendelse a vltozkhoz . . . . . . . . . . . . . ....... 44
typedef . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... 45
Mikor hasznljunk short s mikor long tpust ... . . . . . . . . . . ...... ,47
El6jel nlkli egszek tlcsordulsa ................................ 47
Az el6jeles egszek krbefordulsa .......... , . . . ........ .. ... ...... 48
llandk . . . . . . . . . . . . . . . . . . . . . . . . . ............... .. , ........ 49
Uterlis llandk ........................ ... . ... . ... . . ..... ... 49
Nevestett (symboJic) llandk .............. . ................... 50
Iland6 bevezetse a #define ku1cssz6val ..... .. , . . . . . . . . . . . . 50
lland bevezetse a const ku1csszval. ...... . ..................... 51
Felsorolt (enumemted) llandk ............ . . , . . . . , , .... ...... 51
Krdsek s vlaszok
Gyakorlatok
Kvz
Feladatok .
Vlaszok a kv'L.krdsekre ..
................... . ................. 52
.. ... . ... . .......... . 53
. ... ... 53
...... . .. . .. . . .. . 53
.... ...... 54
4. ra Kifejezsek s utasftsok
Utastsok
res helyek ..
sszetett utastsok
Kifejezsek
.55
.. 56
.. 56
.. 57
Tanuljuk meg a C++ programozsi nyelvet 24 ra alatt v
Opertorok ..................... .
rtkad opertor ............... .
. .. 58
. .... 58
Matematikai opertorok ................................. 59
Matematikai s rtkad opertorok kombinlsa . . . . . . . . .. 60
Nvels s cskkents. . . 60
(prefix) s uttag (pOStfL'0 opertorok .............. . .... 61
Precedencia, avagy a vgrehajtsi sorrendje ........ 63
Egymsba gyazott zrjelek sszetett kifejezsekben. . .... 64
Relcis opertorok ........ 65
Az if utasts . . . . . 66
...
sszetettebb if konstrukcik ....... . . 68
Kapcsos zr6jelek hasznlata egymsba gyazott if utastsok esetn .. 70
A logikai opertorokr61 . . . . . . . . . . . . . ................. 73
Logikai S .. . . 73
Logikai VAGY. . . . . . . . . . . . ........ 74
Logikai NEM. . . . . . . .. .. . . . . . . . 74
Relcik precedenciiija .... 74
az igazsg termszetren . . . . . . . . . . . . . . . . 75
Krdsek 6s v<laszok ....... . . . . . . . . . . . . . . . . . . . . . . .. 76
. Gyakorlatok . . . . . . . . . . . . . .. . ... 76
Kvz .. . ......... 76
........ . . . ......... n
Vlaszok a kvzkrdsekre .
5. ra Fggvnyek
Mi is az a fggvny? ................... . . .. . . . . . .
A fggvnyek deklarlsa s definilsa
. ...... 77
79
.81
.81 Fggvnyek deklarlsa .
Fggvnyek definilsa
Fggvnyek megadsa: sszegzs
... .. .. 83
.. ... . . . .. . ... ..84
Vltozk hasznlaca fggvnyeken bell ........... . ........ 85
Helyi vltozk ............... . .
Globlis vltozk ............... ... ...... . . .
A fggvnyek argumenrumai ....... . . . .
Fggvnyhvs mim paramter ....... . .... . .... .
A paramterek egyben helyi vltozk is ..... . .. . .
rtkek visszaadsa ... . ....... .. . .
.... . .. ...... 86
..88
..89
..89
. . . .. . . 90
. ... 92
r-ggvnyek alaprtelmezett paramterei ................ . .. 95
Fggvnyek tlterhelse .. . ........... . . ....... 97
Inline fggvnyek .. .. . ......... . . ......... 98
A fggvnyek s a verem . . . . . . . .... . . . ... 101
Krdsek s vlaszok .......... . .. . .... . . . .... . ........ 103
,
vi I Tanuljuk meg a C++ programozsi nyelvet 24 ra alatt
Gyakorlatok ....... . . .
Kvz ...
Feladatok
Vlaszok a ... .... . .
6. ra Vezrlsi szerkezetek
Ciklusszervezs ..... .
A ciklusok 6se: :I goto utasts
104
...... 104
. 105
105
. .... ..... 107
.... ..... 107
Mirt ne hasznljuk :I goto utastst? ...... ... . . ... ........ 108
A while ciklus ....... . ............. .
llonyolulcabb while UUlstsok ........ .
A <.:ontinue s a break ......... ....... .. .
while(1) - vgtelen klusok
A do .. . while ciklus .......... .
A for ciklus .. . ......... .
lnidali zd6, vizsglat, lptets.
sszeteuebb for ciklllsok ............ .
Halmozott inidaliz:d s lptets .. .
res UUlstsok a for ciklusfejben .. .
res for ciklus .... ...... ......... .
Egymsba gyazott ciklusok
A switch utasts ....... .
Krdsek s vlaszok .... .
Gyakorlatok ......... .
Kvz ..
Fehldalok ................. .
Vlaszok a kvzkrdsckre ... .
II. rsz Osztlyok
7. ra osztlvok
Mi a tpus? . . . .......... . .
j tpus ltrehozs,l
Osztlyok s tagok ..... . .
Osztlyok deklarlsa
Osztlyok nevezkIana ..
Objekrum definilsa .
Osztlyok s objektumok
Osztlyok Ulgjainak elrse:
Privt s publikus hozzfrb
Osztlymetdusok
Konstruktorok s clestru!-.. 'l( :;
....... 108
........ 109
. .. 111
.. 113
. 114
. 117
...... 117
....... 119
....... 119
. ..... ...... 120
. . . . . .. .. ..... 122
. . ...... 123
. . . . . . . . . . 124
. 126
. .... 127
........ "127
.. ..... .. 127
. ...... 128
...... 13]
.. ..... 132
. ... . . . ... ... 132
............... 133
...... 134
.... . ..... ..134
...... 13;
......... 135
.... ..... ....... 136
.. ... 138
_- .... ltrehozsa s trlse .. 140
Tanuljuk meg a C+ + programozsi nyelvet 24 6ra alatt I vii
Alaprtelmezett konstruktorok ............... . ... .
A fordt Jtal biztostott konstruktor .... ... ... .. . ... . .. .
Krdsek s vlaszok
Gyakorlatok.
.... 141
.... 141
. ... 144
. 144
Kvz
Feladatok
. . ....... 144
.... 145
Vlaszok a kvzkrdsekre ............. .
. 145
8. ra Az osztlyokrl - mlyebben
Konst.1ns tagfggvnyek ........... . . ......................... .. 147
Fellet s megval6sts ............ . ................... . .. . .. J48
Hov tegyk az osztly-deklarcit s a metdus-def'incikat? ............ 149
Helyben kifejtett (jnline) megval6sts ... .... . ............ .... , .. 150
Osztlyok beillesztse ms osztlyadattagjaiknt ...... .. ..... 152
Krdsek s vlaszok ......... ......... . .. .. ... ....... "1 57
Gyakorlatok. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Kvz . . . . . . . .. .. ... .. . . .. ..... 158
Feladato k . . . . . . . . .. . .................. 158
Vlaszok a kvizkrdsekre ...... . .. ....... . ... . .. ... .. .... 159
III. rsz
9. ra
Memriakezels
Mutatk
A mutatk s hasznlatuk megrtse ........ .... . . . . .. . . .
A memriadm trolsa a mutat kban
Mutatnevek .......................................... .
A kzvetett elrs opertor, avagy mutatk kzvetett hasznlata ...
Mutatk, cmek s vltozk. . . . . . . . . . . . . . . .... .. .
Adatok manipullsa a mutatk hasznlatval ............ .
A mutatkban trolt cmek vizsglata .. .. . . . .. .
Mirt j mutatkat hasznlni? .................. . . . .
A verem (stack) s a dinamikus memria (heap) .......... . .. .
A new kulcssz hasznlata
A delete kulcssz hasznlata ..
.... 163
..167
... . 1<>9
.. 1<>9
.. 170
.170
.172
.. 174
. . .. 175
.. 176
.177
Amemriaszivrgs elkerOlse . . . . . . . .. .. . . . . . . . .. . . . . .. 179
Krdsek s vlaszok ............. . . .. ........ ... . .. .... 180
Gyakorlatok. . ............ ... . . ... . .. .. . .. . . .. . ..... 181
Kvz
Feladatok
Vlaszok a kvzkrdsekre
. 181
.. ... .. ... . . . .. .... ... . ..... 181
.... 182
vi I Tanufjuk meg a C++ progral'TJOlsi nyeMrt 24 ra alatt
10. ra A mutatk kifinomult hasznlata
Objekrumok ltrehozsa a memriban
Objektumok trlse o o
Adattagok elrse mutatkon keresztl
Adauagok a dinamikus memriban
.......... ........... ... IM
. ... . . .... . .... .... .... . ..... 184
o o o o o o o o o o o o o o 185
...... ................. 186
A this mutat . o o o o o o
o o o o o. o o o o. 0 188
Gazdtlan vagy mutatk ........ .
. ...... .. ... .. ...... 190
Konswns mutatk o o o. o 0'0 o. o. o,. o o o 191
Konstans mut:ltk s konstans tagfggvnyek. o o ., o o , , o o , o o o o o 191
Konstans this mutatk ......... o o o o o o o o o , 93
Krdsek s vlaszok ........ o o o 193
Gyakorlatok. . ................ o o o o 194
Kvz o o o o o o o o o o 194
P<:!ladalok o o o o o o o o o 194
Vlaszok ti kvzkrdsekre o o o o o 194
11. ra Hivatkozsok
Mi :IZ a hiv:ll.koWs (referencia)? ... o o o o o 195
Hivatkozsok ltrehozsa .......... o o o o o o o 196
A opertor alkalma7.sa hivatkozsokra o. o o o o o o o o 197
A swap() javtsa mutatk segtsgvel o o o o o o o o o o 203
A SW:lp() jabb megvalslsa hivatkozsokkal o o o 204
Kvz ...... o o o o o o o o o o 210
Feladatok . . . .. o o o o o o o o o o o o o 210
Vlaszok a kvzkrdsekre o o o o o o o o o o o o o o o o o 211
12. ra A hivatkozsokrl s mutatkrl - mlyebben
Hmkonyabb a cm szeri nti paramtertads .. o o o
Mutassunk konstansr.i ........ o
Hivatkozsok, mint a mutatk knyelmes alternatvi.
Mikor hasznljunk hivalkozsokat, s mikor mutatkat?
Ne adjunk vissza mcgszCnt objektutnr3 mulat hivatkozst!
A dinamikus mcm6rialerleten ltrehozott objekUlmra
o. o o o o o o o o 213
o o o o o o 217
. ...... 219
.. 221
............... 222
mutat hivatkozs visszaadsa o o o o o o o o o 223
Mutat, mutat, ki a mulat? . o o o
Krdsek s vlaszok .. o o
Gyakorlatok .. o
Kvz o o o o o o o o o o o o o o o o o o o
Fcladatok o o
Vlaszok a kvzkrdsekre
............... 226
o o o o 227
0227
0227
o o 0228
o o 0228
Tanuljuk meg a C++ programozsi nyelvet 24 ra alatt ix
IV. rsz
13. ra
Halad eszkzk
A fggvnyek kifinomultabb hasznlata
Tlterhelt tagfggvnyek.
Alaprtelmezett rtkek hasznlata
Hogyan vlasszunk a tlterhels s az alaprtelmezett
rtkek h:lsznlata kztt?
Konstruktorok tlterhelse
.. . 231
... 234
.... 236
..... 236
.. 237 Objektumok inicializlsa
A msol konstruktor
Krdsek s vlaszok
Gyakorlatok.
.. . . .. . . .... . .. 237
Kvz
FeJadalok
..... . ..... 242
.. 243
243
.243
Vlaszok a kvzkrdbckre .. ... .. .. .. . . .. . . . ..... 243
14. ra
Opertorok tlterhelse
Hogyan terhel hetnk tl operulorokat .
rjuk meg az inkremenul6 fggvnyt ...... ... .
A postfix (Ul6tag) inkremenu:i l operihor tllerhelse
A prefix s a postl1x kzui kl nbsg
operator+ ...... .
Az operator+ therhelse .
Az opertortlterhels korltai
Mit clszerti tlterhelni?
operator"
Konverzis opertorok
Az intO opcdtor . .
Krdsek s vlaszok
Gyakorlatok .
Kvz ...
Feladalok
Vlaszok a kvzkrdsekre .
15. ra Tmbk
Mi az a tmb? . ... . .... .. .. . .. .
A tmbk elemei .
Tmbk tlrsa
Kertsoszlop hibk .
Tmbk
ObjekUllntmbk ........... . .
Tbbdimenzis tmbk ...... . . . .
. 245
247
248
. ........ . .... 248
. 251
. .. 252
... 254
.254
.254
.258
.260
. 261
.. . 262
. .... . 262
. ....... .. 262
. . .. 263
....... 265
. . . ... 266
. .. 268
268
269
. ... .. ..... .... 270
. .. ... . ...... 272
x I Tanuljuk meg a C+ + programozsi nyelvet 24 ra alatt
Tbbdimenzis tmbk inidalizlsll
Nhny sz II memrial1asznlalr61 ........... .
Mutattmbk . . .......... .. ... .
Dinamikus memriban trolt tmbk deklarlsa
Tmb mutatja s mutatk tmbje ...... .
Mutatk s tmbnevek .............. .
Dinamikus memriban ltrehozon tmbk trlse
Karaktertmbk .....
Az strcpyO s az strncpyO fggvnyek
Karakterlnc-osztlyok ... .
Krdsek s vlaszok . .. .
Gyakorlatok.
Kvz
Feladatok
.273
.. ... 275
........ 276
.... 278
.. .... 278
.. .. .. .... 279
.. 281
. . . . ..... 282
.......... . . 284
.. .. . .. ..... 286
.. ..... 287
.. 287
....... .... . . ...... 287
.. .. . . ..288
Vlaszok a kvizkrdsekrc ........... . ............. .. ..... 21J8
V. rsz
16. ra
s tbbalaksg
Az
Mi az az . . . . . . .................... ..... . ......... 291
s szrmaztats ....... . .......... . .. . . . . ...... 292
Modell ezzk az az llatok Orszgval. . . . . . . . . . . . . . . ... 293
A .';zrmaztats szintaxisa . . . . . . . . . . . . . . . . . . . . . . 294
Privt vagy vdett? . . . . . . . . . . ... . ......... 296
Konstnlktorok s destruktorok ...... .. .. . .. ... . .. . ...... 298
Paramterek tadsa a bziskonstruktornak .......... . ..... 300
Fggvnyek fellbrlata . . . . . . . . . . . . . . . . .. . .. .. ... ... ...... 305
Tlterhels vagy fellrs? ........ . . . . . . . . . . . . . . . .... 307
A bzisosztly metdllsaimlk elfedse . . . . . . . . . . . . . . . . . . . . 307
A bzismetdlIs meghvsa .... . . . . . . . . . . . . . . . . 309
Krdsek s vlaszok . . . . . . . . . . . . . . . ..... 31 1
Gyakorlatok. . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Kvz... ... .. .... ... .. .... .. .. . ... .. 311
Feladatok ...... . ...... 311
Vlaszok a kvzkrdsekre .............................. 312
17. ra A tbbalaksg s a szrmaztatott osztlyok
A vinulis fggvnyekkel megval6ston tbbalaksg ...... . ......... 313
Hogyan II virmlis fggvnyek ............ . . . . . . . . . 318
Nem juthaL,>z innen amoda. . . . . . . . . ....... 319
Szeletels (slicing) . . . . . . . . . . . . .. . .. ........ 320
Virtulis destruktorok .. . . . . . . . 322
Tanuljuk meg a C+ + programozsi nyelvet 24 6ra alatt I xi
Virtulis msol konstruktorok
A virtulis fggvnyek klL5gei ..... .
Krdsek s vlaszok ........ .
Gyakorlatok.
Kvz
rdadatOk
Vlaszok a kvzkrdsekre .
18. ra A tbbalaksg kifinomult hasznlata
... . 322
... 326
. .... 126
..327
..... 327
..... 327
. ..... 8
Problmk az egyszeres rkl6dssel ....... . .. . . .329
.. 334
.. 338
.. .. 342
345
Elvont adattpusok. . . . ........... . ..........
res virtu,lis fggvnyek ....... ... ....... . .. . ...... .
Az res viltulis fggvnyek megva16ststl .......... . .. .
Az elvonatkoztats sszetett hierarchija ..
Mely tpusok elvontak?
Krdsek s vlaszok
Gyakorlatok.
Kvz ....
FeJadatok
Vlaszok ti kvzkrdsekre ........ . . . . .. . . .. . .
19. ra Lncolt listk
Lncolt listk s egyb struktrk ....... .
Esetlanulmnya lncolt listk hasznlatrl
A felel6ssg truhzsa ..
Az alkotrszek
Mi a lncolt listk tanulsga?
Krdsek s vlaszok
Gyakorlatok. . ....... .
Kvz
Feladatok
Vlaszok a kvzkrdsekre ......... . ..... . .. ... . . .. .
VI. rsz
20. ra
Klnlegessgek
Klnleges osztlyok, fggvnyek, mutatk
Statikus tagvltozk .
Statikus tagfggvnyek
Egymst tartalmaz osztlyok ............... . .... .
A tartalmazott osztly tagjainak elrse
A tartalmazott osztly elrsnek korltozsa
....... .349
350
. 351
. 351
. ........ 351
.352
. ... 353
. 355
.355
........ 355
364
365
366
366
.366
....... 366
... 369
. ...... 372
.... 374
. . .. . . . . 380
. . . . . 380
Xli , Tanuljuk meg a C++ programozsi nyelvet 24 6ra alatt
A tartalmazs kltsge ... .. . , . . . . . . . . . . 381
rtk szerinLi s hivatkozs slerinti msols. . .. ... ... . . , . . . .. 381
Barti viszonyban osztlyok ....... . . ......... 381
Barti viszony fg&'Vnyek kzlt ............... . .. . . . . ..... 382
Fggvnymutark ....... , . . . . . . . . . . . . . .... . 382
Rvidtett rsmd . . . . . . . . . . . . . . . . . .. 386
Fggvnymutatk tmbje . . . . . . . . . . . . . . . . . . . . . . .. . .. 386
Fggvnymutatk tadsa ms fggvnyeknek .. . ..... 389
A type(k:r hasznlata fggvnynmtatkkal ........... . ............ 391
Tagfg&>vnyekre vonatkoz mutatk . . . . . . . . . . . . . . . . . . . . . .. 394
Tagfggvnyekre vonatkoz mutatkhl ll tmbk ....... . ..... 397
Krdsek s vlaszok .. . . . . . . . . . . . . . . . . ........ 400
Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. 400
Kvz. . . . . . . . . . . ....... . .................... . ......... 400
Feladatok . . . . . . . . . . . . . . . . . . . . . . ... . ...... 401
Vlaszok a kvzkrdsekre . . ..................... . ......... 401
21. ra Az
Az s a fordt ......... .. .......... . ................ 403
A kztes llapot mentse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
A #denne direktva hasznlata. . . . . . . . . . . . . . . . . . . . . . . . . . . . .... 404
A . define hasznlata lland6kkal kapcsolatban . . . . . . . . . . . . . . . . . .. 405
A -*define s az '#ifdcf hasznlata vizsglatok vgzsre. . ........ 405
Az #else direktva .............................. ..... .... 406
Beszrs s annak vezrlse .. . . . . . . . . . ........... .......... 407
Szimblumok definilsa a parancssorban .......... . .... . .......... 109
A rnegszntetsc .. . . . ................ 409
Feltteles fordts ......................... . ... . .... . . . ........ 409
Makrknt megvalstott ........ . .
Mi ez a rengeteg zrjel? .....
Makrk, fggvnyek, sablonok
Karakterlncok kezelse .......... .
. ........ 410
........... 41 1
.. . .......... 413
. ............... 414
A szvegg ala kt (slringizing) opertor. . . . . . . . .. . . . . . . . . .414
Az opertor. . . . . . . . . . . . . . . . . . . . . . . . ... 414
meghalrozoa makrk . . . . .. . . . . . . . .. . . . . . .. . .. . .. 415
Az aS5ertO beptett makr . . . . . . .. ........... . ..... . .116
Nyomkvets az assertO makr6 segtsgvel .418
A makrk mellkhatsai ....... . . ................ 418
Osztlyinvarinsok ............ . . ... 420
Kztes rtkek kiratsa ...... . . ... ... 425
Nyomkvetsi szintek
Krdsek s vlaszok
Fe1adatok .
.. ... .... .. ... . ... . . .. . . . . .. ... 426
...................... .432
.... .. ......... ... . . ..... . ...... . .... . . 4.l3
Tanuljuk meg a C+ + programozsi nyelvet 24 6ra alatt I xiii
Kvz , ...... . ........ 433
Gyakorlatok . , ...... . .. ... .... ..433
Vlaszok a kvzkrdsekre .. . ............ ........... . ........ 434
22. ra Objektum-orientlt elemzs s tervezs
A fejlesztsi ciklus . . . . . . . . . . . . . . . . . . . , . , 435
riaszt6rendszer szimulcija ... ..... . ............ , . . . . , 436
Konce[Ki6lelV .......... ... ... .. .. . .. ........ 437
Elemzs s az ignyek felmrse ........ ........... . ........... 437
Magas s alacsony szinnl teJVezs ....... . .... .. ... . . ... .... 438
Egyb objektumok . . . . . . . . . . . . . . . . . . . . . . . . .. 439
Milyen osztly.link lesznek? . . . . . . . . . ............... 4,,9
Hogyan jelezzk a ri:lsztsokat? . . . . . . . . . , . 440
Esemnyhurkok . . . . . . . . . . . . . 441
PostMaster: egyesettanulmny . . . . . . . . . . . .... . . ' , 443
Mrj ktszer, vgj eb'Yszer . . . . . . . . . . . . . . . . . . . . . . . . , ... 444
Oszd meg s uralkodj. . . . . . . . . . . . . . . . . , ... 444
zenetform;'itum . . . . . . . . . . . . . . . . . . ........ . , .. , ...... 445
Az osztlyok kezdeti telVC ....... . ....... .. . . , ...... 446
Egy vagy tbb kiindulpont hier'dfchia .. . ........ . .......... 447
Interfszek tervezse .................. . . . ... ... , .. . . ....... 449
Prototpus ltrehoz.1S:l ................. . . . . . . . . . . . .. 450
A 8O/80-as szably .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
A PostMasrerMessagc os;t.t{ily tervezse . . . . . . . . . . . 452
Az interfsz. . ..... . ..... . , . .. , .... 452
Progmmozs nagy csoportokban ......... , .... , . . . . . . . ... 454
A tervezsi folyamauaJ kapcsolatos szempontok. . . . . . . . . . . . . ....... 454
TelVezsi dntsek. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .... 455
Mikor hozzunk dntseket? ..... . . . . . . . . . . . . . . . . . . . . . . 455
Munka a . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Krdsek s vlaszok .... . ........... .. , . . . 463
Gyakorlatok. . . . . . . . . . . . . . . . . . . . . . . . . . . . ..... 463
Kvz .. . .... , . . . . . . . . . . . . ..... , . . . .. ...... 463
Feladatok . . . .. ........ ... . . . . . . . . . . . . . 464
Vlaszok a kvzkrdsekre ..... .... . .. .. . .. , . . . ....... 464
23. ra Sablonok
Mik azok a sablonok? ........ . . . . . . . . . . . . . . .. 465
A sablon pldnyostsa . . . . . . . . ... .. . ' . . .. . ..... , 466
A sablon defincija . . . . . . . . . . . . .. . ...... , . . ........ , 466
Sablontpus hasznlata . . . . . . . . . . . ..... .. . ' . . . . . . . , 474
A szabvnyos sablonknyvtr . . . . . . . . . . . . . . . . , 480
xiv I Tanuljuk meg a C++ programozsi nyelvet 24 6ra alatt
Krdsek s vla.o;zok
Gyakorlatok ..... .
Kvz . . ...... ........ .
Feladatok
Vlaszok a kvzkrdsekre
.... . .... .. ......... . 481
.. .. .. .. .. .. .. 481
.. .. 481
..... . . ... 482
..... " ..... ".482
24. ra Kivtelek, hibakezels s nhny tancs
Programhibk, tvesztsek, k6dmegromls . . . . . . . . . . . . . . . . . . . ... 483
Vratlan esemnyek kezelse . . . . . . . . . . . . . . . . . . . . . . . 485
Ki vtelek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485
Hogyan val6sitsuk meg a kivlelkezelst? . . . . . . . . . . . 486
A try s catch blokkok hasznlata ..... 491
A kivtelek elkapsa ................ . . . . . . . . . . . . . . . .. . .. 491
Tbb catch megadsa. . . . . . . . . . . . . . 492
Hivatkozs elkapsa - tbbrtsg a kivlelkezelsben ..... . . .... .. 492
Hogyan rjunk professzionlis m i n s programokat? . . . 496
Zr6jelek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....... 497
Hossz sorok . . . . . . . . . . . . .. .. . . .......... 498
A switch utastsok. . . . . . . . . . . . . . . .. . . . . .... . . 498
A program szvege ................. .. 498
Azonost6nevek . . . . . . . . . . . . . . . . .. . .... . .. .. . . . . ...... 499
A nevek betO"zse s a nagybetuk krdse . . . . . . . . . . . . . . . . 499
Megjegyzsek . . . . . . . . . . . . . . . . . . . 500
Hozzfrs . . . . . . . . . . . . . . . . . . . . . . . . 501
Osztlydefind6k . . . . . . . . . . . . . . . . . . . . . . . 501
Beemelend6 ll omnyok .. .. .. . .. .... . ... .. . ... . . . ...... 501
assenO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
const ... . .. . ... . ........ . . . . . . . . . .. . . . . .. . . . 502
Tovbbi forrsok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Hol kapunk segtsget s tancsokat . . . . . . . . . . . . . . . . . . .. 502
Ajnlott olvasmnyok . . . . . . . . . . . . . . . . . . . .... . 503
Krdsek s vlaszok . . . . . . . . . . . . . 504
Gyakorlatok. . ........ 504
Kvz. . . . . . . . . . . . ..... 504
Fe1adatok . . . . . . . . . . . . . . . . . . ....... 504
Vlaszok a kvzkrdsekre . . . . . . . . . . . . . . . . . . . . . .. 504
VII. rsz
A fggelk
B fggelk
Trgymutat .
Fggelkek
A binris s a hexadecimlis szmrendszerek ..... . .. . ...... 507
Gyakran hasznlt kifejezsek. . . 519
531
A
Jesse Liberty szmos szoflverfejlesztssel kapcsolatos knyvet rt mr, amelyek kztt
akad nhny kiugran is. Ez utbbiak a CH nyelvvel illetve
a technolgival kapcsolatosak. 6 a vezet6je a Ubeny Associates [nc. cg-
nek, amely egyedi programok fejlesztsvel , tancsadssal s oktalssal foglalkozik.
David B Horvath eCCp) tancsad Philadelphiban, Pennsylvaniban L Tbb
mint 15 ve dolgozik az informatikban illetve egyetemi tanr nhny
helyi ilIerve tvoktatssal m(kd6 egyetemen. Az ilala oktatott t rgY'd.k
a C++ nyelvvel, a Unix/Linux opercis rendszerrel, valamint adatbzisokklll kapcsola-
tosak. Diplomjt szervezeti dinamikbl szerezte a University of Pennsylvanin 1998-
ban. Tbb nemzetkzi szeminriumot s szakmai sszejvetelt vezetett mr SZ<1kmai
egyesletek s vllaltok sz!imra.
David a a Unix for the Mainframe (Prentice-Hall/PTR) cmu knyvnek, Jesse
Libeny trszerzojeknt pedig rszt vett a Sams Teach Yourself C++ for Unux in 21 Days
cmu kiadvny rsban. Szintn o rt egyes fejezeteket a kvetkezo muvekbol: Unix
Unleasbed Red l-hit Linux Unleashcd (tbb kiads), Learn Shell
Programming in 24 Hours, Linux Unleashed Fourth Edition, Linux Programming
Unleashed Second Edition. Emellett szmos SZllkcikke jelent meg klnbzo magni-
nokban.
David ri s oktattevkenysge mellett aktv kzssgi ember s nkntes feladato-
kat is vllal szakmai szervezetekben. Ha pp nem a el6u Ol s
knyvet r, akkor kertszkedik, Zlatja magt egy kd forr vzben, vagy nyomdafest-
ket nem hobbikkal Oti el az icl6t. Idestova 17 ve h zas s van nhny kutyja
meg macskja (ezek szma folyamatosan vltozik). Aki trsalogni szeretne vele,
az a cppin24@cobs.com cmen ri el. Reklmleveleket kretik me1l6zni!
xvi I Tanuljuk meg a C+ + programozsi nyelvet 24 ra alatt
Ajnls
Ajimlom ezt a k6l1yuet Edythe-nek, akilo7 az C/etet kaptam; Staccy-nek, aki megosztja
azt ve/em; Robillllak s Nachelllek, akik rtelmet adnak neki.
- Jesse liberry
Ajimlom ezt II k6/1yuettestvremnek Andy-nek sfelesgllek Peg/lck msodik hzass-
gi vford/lljl/k alkalmbl (2004. jlius 13.). Igazbl az eskl1vojtiMI1 akll/1am t-
adlli Ilekik (>gy dediklt pldnyt, de ellltz6doll a projekt.
- David B. HOIVa/h
Ksznetnyilvnfts
Minden knyv kivl6 alkalmal teremt arm, hogy ksznetet mondjunk benne azoknak,
akik nlkl garantltan nem jll volna ltre. Esetnkben a Staccy, Robin s Rachel
Liberty llnak az len.
Ezen kvl szeretnk ksznetet mondani mindazoknak, akik a kiadk-
Sams, Que, O'Reilly, \'('rox - munkatrsaiknt segtenek abban, hogy eddigi ffitlveim
megjelenhessenek. A Sa ms Kiad valamennyien kivl munkl vgeztek,
m kln szeretnm kzlk kiemelni Carol Ackermant, Chrisly Fr..mklint s Paul
Striclandel. Szintn hlval ta!lozom Rieh Halpertnek. Vgezetl szeretnm megk-
sznni Mrs. Ka1is munkjt, aki 1965-ben, hatodik oszt{llyos koromban megtantolIa
nekem, hogyan kelJ keHes szmrcndslerbcn sszeadni s kivonni, mikzben sem 6,
sem mi nem tudtuk, hogy ez pontosan mire is j.
-Jesse liben)'
Mindazok mellett, akiknek Jesse az imnt ksznetet mondoLL valjban mg sokan le-
hetnek II Samsnl, akiket kifclejtcttlink. cz ton is elnzst szeretnk krni. J-
magam Songlin Qillval s Lorella Yatcs-Slel dolgoztmn ezen ;1 projekten.
Ez a knyv termszetesen nem jhetett volna ltre a csa!{I c.!orn, killnskppen pedig
felesgem Mary tmogatsa s megrtse nlkl. Sajnos a knyvr.'is mr csak ilyen.
Az embernek leginkbb estnknt meg htvgn van ideje s hangulata az alkotshoz,
amikor a csalddal kellene lennie. Ilyenkor jn aztn a de most nem tudok vele-
lek menni, mert a knyvn kell dolgoznom" szveg.
-/)cwid B. Horoath
Tanuljuk meg a C++ programozsi nyelvet 24 ra alatt I xvii
Kfvncsiak vagyunk az n vlemnyre!
Mint a knyv olvasja, n, kedves olvas a mi kritikusunk. ppen azrt nagyr.!
rtkeljk az n vlemnyt. Tudni .szeretnnk, ha valamit jl csinltunk, s persze a7.t
is, Ita nem. Tudni szeretnnk, milyen ms teriilctekr61 olvasna szvesen knyvekct eb-
ben a sorozatban, s termsZdesen rmmel fogadunk minden egyb megjegyz.<;l is.
A Sams s a Kiskapu Kiad rmmel meghallgatj:t mindenki vlemnyt. Kt:rjlik rja
meg neknk, mi az, ami tCtsZett nnek vagy ami nem tetszett ebben a knyvben, hi-
SZen ez na!.'Yban segtheti tovbbi munknkat , s azt, hogy egyre jobb kny-
veket adjunk ki.
Ug)'clllakl...'orjCJ/lIOSl wk r,mjl/k megjegyezni, hogya knyv rmta!mva! kapcsolaros 11/11-
szaki /...0rdsekbclI lfal!?clII /leli! rudullk segrelli. A SC/ms Kiad6nak IIg)'l/I/C/kkor U(1/1
egy Felhaszn/i SzolgItClf rszlegc, amcly (I lII)'Vve/ kapcso/alos krdseker meg-
kapja, s esetleg II/egulaszolja.
Ha r neknk, krjk adja meg a knyv pontos dmt s szerz6jt, az n nevt, e-maii
dmt s esetleg telcfonszmt. Amennyiben mdunkban ll, me!,'Vizsgljuk a felvetst
vagy problmI , illetve megoszt juk aZI a s a szerkeszt6vel.
A knyv eredeti angol ki:tdjt:l feedback@samspublishing.com cmen rheti el.
Ha hagyomnyos levt:lben kvnja a Sams Kiad6t megkeresni, levelt a c-
men vrjuk:
Email: feedback@samspublishing.com
Maii: Michael Stephens
Associate Publisher
Sams Publishing
800 East 96th Street
Indianapolis, IN 46240 USA
Magyar kiadssal kapcsolatos megjegyzseit krjk a kiadoElkiskapu . hu cmre kldje.
A Sams egyb kiadvnyaival kapcsolatban krjk ltogasson el
www.samspublishing.comcmre. Ha ezzel a konkrt knyvvel kapcsolatban keres
valamit a SAMS webhelyn, a krjk az eredeti kiads ISBN szmt
(0672326817) gpelje be.
A magyar kiads weboldalt s anyagait a Kiskapu Kiad webhelyn
(www.kiskapukiado.hu) tallja meg.
BEVEZETS
Ennek a knyvnek az a clja, hogy 5egtsgvcl <IZ olvas megtanulhasson C++ nyel-
ven programozni. A ktet 24 tan6rnak megfeld anyagot tartalmaz, s
rszletes ttekintst az olyan mint a be- s kimenet kezelse,
a ciklusok szervezse, a tmbk hasznlata, az objektum-kzpont programozs vagy
a sablonok (template). Mindez elengedhetetlen ahhoz, bo!:.')' valaki C++ nyelven mk-
d alkalma7..sokat mdjon fejleszteni. A leckkben szmos a tananyagot illusztrl kd-
rszlet tallhat6, :lmelyeknl mindig megadtuk azt is, hogya prog'.lrn futtatsnak mi
a kimenel. A fontos szintaktikai elemeket kln is igyekeztnk kiemeh,i, hogya knyv
utlag, referendaknt is hasznlhat legyen. Valamennyi ra anyaga nh{my krdssel
s gyakorlattal vgz6dik, ezzel is segtve :L tanultak gyakorlatba v,116 temelsl. A ko-
rbbi kiadsokb61 hi{myzott az ebben a kiadsban minden lecke vgn felbukbn6
kvz, amelyhez termszetesen a hel yes vlaszokat is megadjuk.
Kinek rdemes elolvasni ezt a knyvet?
a az is megtanulhalja a C++ nyelv has:miilat{ll, akinek semmifle ko-
rbbi programozsi tapaszmbta nincs. Mi mindenl az clcj6r61 kezdnk elmagyaclzni,
vagyis nem csak magt nyelvet tantjuk meg, hanem a C++ programozssal
kapcsolatos koncepcibl, alapelveket is. A szintaxist mindig pldkkal illusztrnljuk,
a bemutatott k6dok mikdst pedig szksg esetn akr soronknt elmagyarnz7.uk.
ppen ezrt gondoljuk gy, hogy ez a knyv nagyszeni trs lehet egy a C++ nyelv bi-
rodalmban tell utazshoz. Akr rendelkezik az olvas korbbi programozsi tapaszta-
latokkal, akr teljesen bzunk benne, hogy e ktet vilgos szerkezete meg-
knnyti majd szmra a tanulst.
Nem kellene el6bb megtanulnom a C nyelvet?
Ez a krds b'Yakorlatilag elkerlhetetlenl merl fel, hiszen a C++ bevallottan nem
ms, mint a C nyelv tovbbfejlesztse. Kell-e teht ismernnk magt a C nyelvet ahhoz,
hob'Y megruk a v ltozatot"? Stroustroup, a C++ nyelv alkotja s szmos ms
is egyetrt abban, hogy nem csak hogy nem kell ismernnk a C-l, hanem bi-
zonyos helyzetekben kifejezetlen is, ha nem tudunk rla semmit.
ugyanis, hogya korbban C-ben progl'"dmoz6knl kialakulnak bizonyos "rossz
szoksok", amdyeknek C++-ban mr nem tudnak "hdolni", s amelyek kezdetben
gtoljk az tJlsban. Ennek a knyv megrsa sorn mi sem
)o( I Tanuljuk meg a C+ + programozsi nyelvet 24 ra alatt
fcJtteleztk az olvasr61, hogy ismeri a C nyelvet Persze ha valaki mgis, akkor sincs
semmi veszve. Nekik azt ajnljuk, hogy fussk t az e1s6 nhny fejezetet, csak hogy
kpbe kerljenek, aztn kapaszkoc\janak meg valami szilrd objektumban, mert hama-
rosan az ltaluk ismert nyelv olyan kiterjesztbeit fogjk ltni, ame\yekr61 eddig nem is
:lmoc1tak.
Mirt rdemes megtanulni a C+ + nyelvet?
Ez megint egy igen gyakori krdse, 561. ll!llb-.tn olyasvalan szokott utna jnni hogy
H V&tiI is az X nyelv lJ lagljabb s legnalJyszen7bb, s hamarost/Il gyis levltja ti C++-I".
Erre a rvid vbszunk krlbell hogy .Nem addig van az!". Rengeteg olyan
nyelv vol! m:lr, amir61 egy id6ben mindenki tudta, hogy le fogja vltani a COBOl-t, mg-
is ebben a pillanatban is thh milli sornyi olyan COBOl kd van, ant "komoly" szerve-
zetek rendszereiben aktvan hasznlnak. (Mi tbb, foly:mlatOsan jabb sorokat is irnakD
Krlbell ugyanez a helyzet a C++-szal: kdsorok milliit rtk ezen a nyelven, 86t, mg
mindig rjk 6ket. A msik nyoms indok, amirt mindenk6ppen rdemes megtanulni
l C++-t az, hogy br vannak . jabb s nyelvek, az(:rt ezek bevallOlwn sokat me-
rtettek a C++-bl. Mind :1 Jav:1 mind a CI:t sz{unos .. C++-szal eb'Ycz6 nyelvi elemet tartal-
maz, viszont ezeknek a nyelveknek az els.1jttsa tbb ponton jval nehezebb.
Aki teht ismeri az j 6st, az knnyebben boldogul majd a leSZ:.'rmazot-
takkal is. De akr tovbb is mehetnk: a C++ ismerete nem csak a Java vagy a C .. elsa-
jttsa sorn vlhat el6nynkre, hanem az awk, a Perl na s persze a C tanulsa kz-
ben is. A legfontosabb lnyez6 ezen a tren az, hogya C++-szal olyan hordozhat kl:-
pessgeket sajlthatunk el, amelyeket aztn mindenfle platformon, s az informatik:li
piac legklnbz6bb terletein kamatoztalhatunk, legyen lZ PC, valamilyen nagy telje-
Unix rendszer, vagy egy egsz adatcentrumot megtlt6 mainframc.
Lehel, hogy a kd, amit rtunk nem lesz hordozhat, vagyis nem Tudjuk vltoztats nl-
kl tvinni egyik rcndszcrr61 a de a ruds, amit llllla megszerezlnk, biztos:'ln
az lesz.
A knyvben hasznlt jellsek
A knyvben a kvctkez6 speciCIlis jellseket fogjuk hasznlni.
Az ilyen jelzs szvegdobozok olyan informcit tartalmaznak. amelyek birtokban
hatkonyabb kdot tudunk rni, vagy mi magunk hatkonyabban tudunk dolgozni.
Tanuljuk meg a C++ programozsi nyelvet 24 6ra alatt I xxi
Figyelem!
Az ilyen keretes rszekben olyan problmkra vagy mellkhatsokra hvjuk
fel a figyelmet, amelyek bizonyos helyzetekben gyakran felmerlnek.
TudIa hogy ... ?
Az. ilyen dobozokban tippeket, trkkket mutatunk be, illetve az aktulis tmhoz
kapcsold informcikat kzlnk.
Az ilyen tblzatokban tmren
sszefoglaljuk mindazokat a tancso-
kat, aranyszablyokat, amelyek
az ppen trgyalt tmhoz kapcso-
ldnak. Ilclyes teht, ha odafigye-
J nk ezekre.
Helytele.
Helytelen, ha figyelmen kvl hagy-
juk ezeknek a felsorolsoknak a tar-
talmt.
Ha ezt a szimblumolltjuk, akkor a melletre szveg vabmilyen ppen bemuta-
[ott program kimenett tartalmazza.
Ez a jel mUlat ja az ppen trgyalt pldakd elemzsnek kczdetC:t.
A knyvben ezen kvl klnfle berutipusokat is hasznlunk:
Hogy knnyen meg lehessen klnbztetni a folyszvegec a kdoktl, utbbi-
akat specilis monospace betkszlettel szedtk. Az olyan szavakat s karakte-
reket, amelyek a kd rszt kpezi, de hivatkozs vgett a foly6szvegbcn is
szerepelnek ugyanennek a bettpusnak a vltozatval rtuk.
Az j vagy fontos fogalmakat szintn egy specilis jelljk.
A knyvben tallhat6 valamennyi kdban megszmoztuk a sorokat I-I a teht egy
sor mgis hinyzik a sorszm, az annak a jele, hogy tl6g oda az
sor, vagyis amit ltunk, az csupn egy sor folytatsa. Ilyenkor a kt sort begpe-
lsnl termszetesen egyesteni kell, vagyis egy sorba keU gpelnnk.
xxii I Tanuljuk meg a C++ programozsi nyelvet 24 ra alatt
A CD tartalma
A knyvhz mellkelt CD-n a lalljuk:
V,llamennyi a knyvlX!n fomlskdol.
Egy szabadon hasznlhat integrlt fejlesz16i krnyezetet ODE) s
fordtprogramol,a Borland C++BuilderX-el. Br a knyvben vala-
mcnnyi kdot kipr6blluk ezzel a fordft6programmal, fontos megjegyezni, hogy
maga a ktet nem a sz61. A bemutatott kdokat brmely stabil
C++ fordt6valle lehel fordtani. Szintn fomos hangslyozni, hogy nem minden
fordtprogram kell6cn friss, vagy az rvnyben [vei szabvnyokhoz, gy
egyes k6dokkal helycnknt s id6nknt gondunk lehet, mikzben a tbbi kifo-
g5swlanul makdik. Mivel a piacon szmtal:m fordt6program s azoknak mcg-
szmllhatatlan vltozata 1(;!111Ct fel, termszetesen nem v511alkozllatunk ezek
teljes ttekintsre.
Az 6rk vgn szerepl6 gyakorl atok kzl szmosnak a megoldsl.
I. RSZ
Bevezets a C++
programozsi nyelvbe
1. ra Kezd lpsek
2. ra Egy C++ program rszei
3. ra Vltozk s llandk
4. ra Kifejezsek s utastsok
5. ra Fggvnyek
6. ra Vezrlsi szerkezetek
1. RA
lpsek
Ebben az 6rban a lesz sz6:
Hogyan teleptsnk egy fordtprogramot s hogyan haszn: ljuk azt
A C++ nyelvt1 programfejleszts lpsei
I !ogyan gpeljk be, fordtsuk le, s linkeljk CH programunkat
Elkszlelek a programozshoz
A C++ nyelv filozfija - akrcsak a lbbi objektum-orientlt nyelv (ilyen pldul a Ja-
va iS) - , megkveteli, hogy a munka megkezdse tervezznk. Az olyan egyszeru
fe!adatok persze, amilyenekkel a knyv nhny fejezetben tallkozhatunk, nem
ignyelnek tl nagy Az olyan sszetett feladaloknl azonban, ;'l!nc-
lyekke1 egy igazn profi programoz nap mim nap tallkozik, a tervezs mr ltfontos-
sg. Minl rszletesebb a terv, annl lesz a feladat megvalstsa
a megadott s a klL<;gkeretet is figyelembe vve. Egy j terv ezen kvl segt
a rninimalizlsban s megknnyti a karbantartst is. Becs-
lsek szerint a szoftverfejleszts kltsgeinek 900/o-t a hibakeress s a karbantarts
adja. A tervezs nagy mrtkben cskkenti ezeket a kltsgeket, amely az-
tn a teljes projekt kltsgvetsn is meg fog ltszani.
41 J. rsz Bevezets a C+ + programozsi nyelvbe
Egy program tervezsekor az krds, amit fel kdl tennnk a Mi
az a problma, amil meg szeretnnk oldani? Minden problma megoldshoz meg-
behatrolt clt kell mint ahogy ezt a knyv legaprbb pldinl is
megtesszk.
A msodik krds, amit minden valamire val progmmoz feltesz magnak: Megoldha-
f ez a/dadal eg)'edi program r.sa nlkl is? Egy rgi program jrah'lsznostsa, t-
dolgoz,sa, vagy egy mr meglv6 kereskedelmi szoftver sokszor jobb megoldst nyjt-
hat egy problmra, mim mindent teljesen kezth:::ni. Aki ilyen alternatvkat k-
nl gyfelei sz:hnra, sose mamd munka nlkl. Egy kllSghatC:konyabb megolds ma
kulcs lehel egy elnk !.rul ajthoz, ajnllevl t:gy mt:gbzshoz.
Hl! mgis j szoftver rsba vgjuk a fejsznket, a kltsgek akkor is lefa-
mgllat6ak, amennyiben felhaszn:'iljuk a mr korbban megrt fi.lggvnyknyvtrakat s
oszt(tlyok:tt (objektumdefinci6k knyvtlra). A fejleszts sebessge ezekkel radik,Hsan
nvclht:t(5, amely rszben magyarzat cl C++ npszerO"sgre is.
Tudta hogy, .. ?
IBM - OeveloperWorl<s portl
Noha az IBM DeveloperWorks portl- http://www.ibm.com/developerworks/ - el-
a Java-hoz nyjt segtsget, mutat nhny remek pldt a fggvny-
knyvtrak megosztsval kapcsolatban is,
Felttelezem, hogy az olvas megrtette a megoldand probitmi s az mindenkpp
j szoftvert ignyel. Vgjunk ht bele a tervezsbe.
A C++ nyelvjrsai (C++. ANSI C++. ISO C++ s a Windows)
C++ egy programozsi nyelv. A Windows, a Unix (mint pldul AIX, Solaris, HP-UX,
stb.), a Linux, s II Mac OS X ezzel szemben operci6s rendszerek. Bizonyra ;IZ olvas
gy szeretn megt:tnulni a C++-t, hogy kso"'bbi programjai architektrt61 s opercis
fggetlenl
A TlnLlljuk meg a C++ programozsi nyelvet 24 ra alatt knyvben ennek megfele-
nem tteleznk fel sernrnit a hasznlt operci6s rendszert A knyvben
az ANSI/ISO C++-t - vagy ms nven a szabvnyos C++ nyelvet - trgyaljuk. Ez egy
nemzetkzileg elfogadon vltozat, meJy brmely architektrn s brmely kr-
nye7.etben hasznlhat.
Aprop6
Mi az ANSI? Mi az ISO?
Al ANSI az Ameri kai Nemzeti Szabvnygyf Intzet (American National Standards
Institute) rvidtse, mg az ISO a Szabvnyosts Nemzetkzi Szervezet
(International Organization for Standardization). a szab-
l, 6ra Kezd61psek 15
vnyostsrt az Amerikai Egyeslt llamokban s az egsz vilgon.
A szabvnyokon nyugv nyelv hasznlatnak nagy hogy mindenki ugyanazt
a lerst s ugyanazokat a szablyokat kveti.
_-\ knyv pldaprogramjai az. ANSI/ISO C++ szabvnyt kvetik s csaknem brmelyik
fordl6programmal le kell tudnunk fordtani Keveset hivatkozunk majd ablakok-
1"3, listadobozokra, grafikra s ehhez hasonl dolgokra, I::zck ugyanis nagy mrtkben
ruggnek az opercis rendszert61 s a hasznlt fejleszt6i
A vgeredmnyt mindig az alaprtelmezett kimeneten kapjuk. Hogy ez mOkdjn, val-
szim11eg kzlnnk kell a fordtval, hogy kamkteres felletre kvnunk alkalmazst rni.
Ez a helyzet a Ha rland C++l3uildcrX-szd is. Nhny fordt - tbbnyire a grafi kus felletre
rtak (\Vindows, Mac, stb.) - ezt gyors (quick window) vagy egyszeru (simple window)
ablaknak nt:vc:.::i , esetleg egys:.::enen csak konzolos alkalm:lZ.sknt hivatkozik tiL
A knyvben mi mindvgig l11:lgt a fordt6progr:l mot (compi ler) hasznCIljuk. E:.:: az
a progmm, ami lefordtja az emberek szmra olvashat6 forrskdot gpi kcinI. A vg-
eredmny egy trgykcl llomny (object file) lesz. A linker szir,t{:n I::gy program, mely
a trgyk6d l!om:'inyokat sszef(izve hozza ltre magt a futtathat prognunot.
A knyvhz tartoz CD-n tallunk egy ilyen fordtprogramot. A kvetkez6 rszben J
psr61-1psre bemUIatjuk, hogyan kell telepteni a Borland CH BuilderX-eL Ez egy
Windows alapO integrlt krnyezet (Integr:lted Development Environment -
IDE), mely szolgltatsaiv<il megknnyti a fejlesztst, hiba keresst, slb. Terms:.::etesen
hasznlhatunk ms - akr Windowst61 fggetlen - fordtt is. Ez csak r'.ljlunk ll.
A fordft teleptse s beUftsa
A knyvhz mellkelt CH BuilderX integrlt fejleszt6i krnyezet Microsoft Windows
operuds rendszer alatt futtathat.
Amennyiben nem ilyen krnyezetben dolgozunk, nyugodtan ugorjuk t ezt a rszt. Eb-
ben az csetben keresnnk kell egy, az opercis rendszernkhz elC:rhet6 fordtt.
Az opercis rendszer dokumentcija vagy a szllt cg tovbbi rszletekkel szolgl-
hat a hasznlhat fordtprogramokkal kapcsolatban.
Ha Windowst hasznlunk, teleptsk a Borland C++ fordtt s a hozz tartoz fejlesz-
krnyezelet. A knyv brinak ksztshez mi is ezt hasznltuk. Maga a gmfikus
fellet sokaknak lehel, hiszen tallkozhattunk vele Borland Compiler, Borland
CHBuilderX, CHBuHderX, vagy C++BuilderX IDE nven is, dc ez valjban mind
ugyanaz a termk.
s i l. rsz Bevezets a C++ programozsi nyelvbe
Telepts a CD-rol
Helyezzk be a CD-t a meghajtba s vrjunk, amg elindul az automatikus telepts.
Ha el nem trtnne meg, indtsuk el a CD-n tallhat6 install . exe programot.
Az install. html s a readme . txt tovbbi informcikkal szolgl a program legfris-
sebb kiadsrl. Amint elindult a te1ept6program, kvessk az albbi lpseket:
l. Kattintsunk a Next gombra.
2. Fogadjuk el a Fclhaszn:l :si feltteleket.
3. Kattintsunk a Next gombra (hagyjuk alaprtelmezeuen).
4. Vlasszuk a Full Install Sel pontot (Teljes telepts), s kattintsunk a Next-re.
5. Vlasszuk ki a telepts cl knyvtrt (az alaprtclmczctl val6sznl1leg megfele-
16) s Next-re.
6. Vlasszuk ki az ikonok helyt (aL alaprtelmezett itt is megfelel6
lesz) s kaltintsunk a Next-re.
7. Vgl pedig kattintsunk az Install-ra. Vrjuk meg amg a telepts
Termszetesen a progr-drnunkat mg regisztrl ni is kell. A Borland-tl egy llomnyt
kapunk, melyet be kelJ msolnunk a program knyvt rba (egyszen.en kvessk az e-
mai lben kapott egyszen. lpseket). Ezzellulajdonkppen mris hasznlhat a prog-
ram, de mg elvgeznnk rajta nhny belltst.
A Borland C++BuilderX fordft b.llftsa
Tndlsuk el a C++BuikJerX-szct, .1 kveLkez6kppcn: kattintsunk a Start gombra, majd
a Minden program pontra. ILL keressk ki a Borland C++ 13uilderX pontot majd legv-
gl kattintsuk a program ikonjfl r-.I. Ha mindent jl csi nltunk, akkor elindul a
krnyezet. Most az alapbc{llItsokkal fogunk foglalkozni, amelyeket termszetesen
brmikor mdosthatunk :1 mensorban tallhat Tools menponlra kanimva.
Az l. l -es bdra pillantva lthat, hogy a menS{)f alatt kt sorban helyezkednek cl
gombok. Ez al eszkztr. Az egnnutatt az egyes gombok fl hzva rvid lerst ka-
punk az adott gomb f\Jnkcijll r61. Az fels6 sor els6 ht ikonj{lVal az albbi mtiveleteket
rhetjk el balrl jobbra haladva: j fjl ltrehoz{)sa (iu kszthetnk j projekte, [5jl
megnyitsa projekt megnyitsa), fjl ism(:telt megnyitsa (a lemezen tallhat
llomny beolvassa), forrs bezrsa, aktulis fjj mentse, az sszes fjl ment{!sc, il-
letve a nyomtats. Az 10101 felirat fjl ikonra kaUintva fordthat juk le a forrst s k-
szthetiink futtathat llomnyt, a zld nyl pedig elindtja az elkszlt progr.a-
mot. A gombok megFelel6it a mensorban is megtallhatjuk rvid keress utn.
Szmos ikonnl szerepel a projekt sz. A projekt egy csomag, amely sszefog tbb
egymshoz taltoz A C++Buil derX .cbx menti a projektfjlo-
kat. A legtbb a knyvben projekt csupn egy llomnybl ll, ami kiss r-
1. 6ra KezdI lpsek I J
Lelmctlcnnck tt1nhet. Ugyanakkor tbb tucat vagy akr tbb szz forrskdllomnnyal
rendelke:d:i projekt esetn igen hasznos ez a szolgltats, teht rdemes mcgtanulni
a hasznlatt.
; [lDo<:uo><"" .. ,,/C .... <PV
-
:;0.0'" !"" [Tolo<t !\'" 1 . .. "'1"''''
,-
,,-
.....
...
-
'II M .
"' .
11:-..""",-:ld- - ,
..
..
ii]FioI,'L-
i
,.
,..,,,'"
-
",
.
o.
-l-,T
-
1.1 bra
, \ C++BuilderX hllcgrll Mrnyazel (IDE)
A alaprtelmezsknt be van kapcsolvn a hibakeress Mi
eZL a knyvben csak fogjuk haszn lni, de addig is rdemes vele megismerkedni.
A Borland fejlcszrkrnyezete beptett rendelkezik. Kattintsunk
az j fj l ikonra, maj d pedig a Source File (forrsfj D flre. Ez a szolgltats egy fj l
szerkesztsre szolgl. Tbb llomnyesetn szintn az j fj l ikonra kell kattinta-
nunk, azonban ekkor a Console Application-t (szveges alkalmazs) kell vlasztanunk,
melyet a Projekt fln tallunk. Ha hasznljuk a varzslt, akkor az is elkszti sz-
munkra a keretrendszert. Ha azonban kikapcsoljuk, akkor forrskdszerkesz-
t ablakot kapunk.
Mentsk a projektet s minden hozz kapcsold l!omnyt egy kln knyvtrba.
A projektllomny . cbx mg a CH forrskdot taltalmaz llomnyok
epp. rdemes megjegyezni, hogya mentskor automatikusan
. cpp kiterjesztsselltja el a forrsIlomnyokat. Az ppen szerkesztett fjl mentshez
kauintsunk az aktulis fjl mentse ikonra.
a l I. rsz Bevezets a C+ + programozsi nyelvbe
Fordts a Borland C++BuilderX-szel
A projekt va!,')' egyedi fjl fordtshoz s a binris llomny sszeszerkesztsf:hez kat-
linL'mnk a Make Projekt ikonra. Nhny fordt ezt a OliTveletet kt lpsben oldja meg:
d6bb fordtanunk kell aztn szerkeszteni. A legtbb integr lt krnyezet ugyanakkor eZt
mr egy lpsben hajtja vgre. A program - krnyezeten belli - futtatshoz
kallinLsunk a Run Project ikonm, hibakeresshez haszn;ljuk a Debug Project ikont.
Ha egy programot hibakercs6vcl fUllalunk, akkor az 1.2 brhoz hasonl6 kp fogad
minket. Ebben az esetben a hetedik sorra !ltot!am be s egszen odig lefutott
a program.
r.,: t . C 1000;....,"" <pp h@!E
, ..
....
,-
.-
tH"e:i - '!il."ilio ....
,. .
;, ..
.. .
(It""'" .....
'"
..
.,
/\1, ID !!!I-..."'"
x...., ... ;
.iit..
' ." ... ----
.
-
... _ ... -.
8:::.
'._<
. ... L ... ..... ..,.
... -c >ot ..... <Mr "1'11 1
-
_ ...... _ .....0
... ..... 0'
"
-
,
' 1 '
--
.-
'ol
,
"
-
li
,,'
._-_., -
. - II
.
, . .s 'a
"' .. ... c_ ...... ,......,.... ___ ....... ' ........ ,
---
1.2 bra
A Borland C++BuildO/X
Amint a kperny6nkn megfigyc1het6, a barna csk jeh:i, hogy melyik le.5z a
programsor, a piros kr pedig maga a trspont. A Lrspontnl ideiglenesen megll
a program futsa. Hibakeress esetn rdemes mr a gyans sornl trspomot
elhelyezni. TrspontOl :IZ adott sor bal szlre kattintva helyezhetnk el. A 5tep ikon
segtsgvel egy sol1lphetnk a futtatsban, mg a Continue ikon folytatj ..
a program futtatst a trspontig vagy a program vgig. A tbbi ikon se-
gtsgvel msms vizsglhat juk a programunkat. Ezek az ikonok az ab-
lak aljnl tallhatak, Hasznos szolgltatsa ennek a krnyezetnek az automatikus for-
dts s szerkeszts, amennyiben ezt futtat.'s vagy hibakeress e16tt nem tettk meg.
,. ra Kozd6 lpsek 19
A Help men Aboul menpont jban tallhat a krnyezet verziszma, mely
1.0.0.1786. A Help men Help Topics (Sg tmakrk) menpont jban C s
C++ refer encit ta llunk. rdemes krlnlni itl is.
Tudta hogy ... ?
Kmyezetfgg sg6
A bemutatotl krnyezet egyik hasznos tulajdonsga a krnyezetrzkeny
sg. Kattintsunk egy kulcsszra s nyomjuk meg az F1 gombot. Egy j ablak nyl ik
meg informcikkal az adott parancsrl.
A fordft6program s a szvegszerkeszt
Egy fordt6progmm gyakran sajt beptett rendelkezik. C++ llo-
mnyok szerkesztC:shez hasznlhat juk eZt, vagy brmely ker<:!skedelmi dc
akr egy irodai programcsomagot is. Mim .I%t mr korbban emltellk, a Borland for-
dtja rendelkezik beptett 13nnilyen szvegs;:.erkeszt6t is v lasztunk,
fontos, hogy tudjon formzs nlkli, egys;:.eru s;:.veget menteni. Garantltan haszm l-
hat pldul a Windows jegyzeumbje, a DOS-os EdiL parancsa, a Brief,
<IZ Epsilon, az EMJ\CS s a vi. S;:.mos irodai szvegszerkeszt6 - WordPerfect, Word,
stb. - szintn ad egyszeru szvegfjl kne mentsre.
Figyeleml
Legynk 6vatosak
Amennyiben irodai szvegszerkeszt t hasznlunk, fontos, hogy formzs nlkli l-
lomnyknt mentsk a kdot, mert br mi el tudjuk olvasni , a fordtprogram nem
tud majd vele mit kezdeni.
A szvegszerkeszt6vel ksztett llomnyok forrskdok s C++ nyelvben. cpp, . exx,
. ep vagy. e kiterjesztssel brnak. A knyvpJdiban llomnyok kiterjeszt-
se . epp, hiszen el az alaprtelmezett a Borland fordtjban.
Aprop
Forrsk6dok kiterjesztsei
A legtbb c++ fordt nem trdik a kiterjesztssel, de amennyiben nem lltot-
tunk be mst, alaprtelmezs szerint j nhny . epp-t fog hasznlni.
10 II. rsz Bevezets a C+ + programozsi nyelvbe
Hasznljunk egyszeru szveg szer-
kesztsre kpes vagy
a fordt beptett
Hasznljuk ki a
nyjtOll<l
A forrnsk6dokat . c, . ep, vagy O ki-
tcrjesztsek valamelyi kvel mentsk
eL (A Borland fordtjnl . cpp
az al aprtelmezett.)
TanulmnyozllIk t az ltalunk hasz
n(t!l fordtprogram s linker doku-
ll1!.:nt{u..:iJt.
Fordfts s linkels
Ne hasznljunk olyan szvegszer-
amely specilis formzka-
raktereket is ment. Ha mgis szeret-
nnk ilyent hasznlni, akkor minden-
kpp ASCII szvegknt mentsk
a forrskdot.
Noh:1 ,I forrs kd szmos ember szi'lmra kicsit knaimik azrt tagadhatatlan,
hogy emberi szem szmra oh'ashat szveg. A forrskd teht nem program, kzvet-
lenl nem futtathat.
Aprop
Fordfts a parancssorbl
Hogya rorrsk6db61 ruttathat programot kszItsnk, szksgnk van egy fordtra.
A paramterezsi m6d fordftnknt vltoz, igy rszletekkel a program dokument-
dja szolglhat.
Ha parancssorbl kvnjuk futtatni a fordtt a krnyezet helyett, akkor
a hasznlt programtl s opercis az albbiakat kell begpclnnk:
Borland fordt esetn - bcc32 <fjlnv> -o <futtt!that llomny neve>
GNU esetn - gxx <fj lnv> -o <futtathat llomny neve>
Cygwin fordftnl- gH <[jlnv> -o <futtathat llomny neve>
Linux alatt - 9H <fjlnv> -o <futtlJthllt llomny neve>
UNIX alatt - CH <f.jlnv> - o <futtathat llomny neve>
Fordrts az tejleszt6i krnyezetben
A legtbb modern fordt6 integrlt krnyezetet is nyjt. Egy ilyen krnyezet-
ben a Build vagy Compil e menpont kivlasztsval vagy a
nci61enyomsval el az alkalmazs fordtsa. A C++BuilderX-ben egyszeruen
kattintsunk a Make Project ikonra.
1. ra lpsek I II
Linkels (sszeszerkesztsi
Miutn lefordtottuk a forrskdot, ltrejtt a trgykd. Ez mg mindig nem fuUathat.
Ahhoz, ho.gy futtathatv tegyk, le kell futtatnunk a linkert.
Egy tipikus - C++-ban rt - futtathat program egy vagy tbb trgykd llomny s
egy vagy tbb fggvnyknyvtr sszeszerkesztsvel, gynevezett linkelsvel jn
ltre. Fggvnyknyvtr szrmazhat a fordtprogram kszt6jtl, forrsbl, de
rhatunk ilyent akr mi magunk is. Maga a fggvnyknyvtr hasznos fggvnyek, elj-
rsok s osztlyok amelyekre hivatkozhatunk a programunkban. A fgg-
vny egy olyan kdrszlet, amely valamilyen konkrt feladatot valst meg. sszeadhat
pldul kt szmot, vagy kirhat valamit a kperny6re. Az osztly egy j tpus defind-
ja. Egy osztlyban az adat s a rajta vgrehajthat egyarnt jelen vannak.
A knyvben mHjd rszletesebben megismerkednk az osztlyokkal.
Egy futt<1that llomny ltrehozsnak tipikus lpsei a
1. Forrskd ltrehozsa s elmentse . cpp kiterjesztssel.
2. A forrskd lefordtsa trgykdd{t
3. A t,rgykd s b{trmely ms - a futtatsl10z szksges - fuggvnyknyvtr ssze-
szerkesztse futtatlmt6 ll omnny.
A Borland krnyezetben a Make Project fordt s linkel egy lpsben. Egy-
egy modul klnkJn is lefordthat, ehhez kattintsunk a jobb egrgombbal a projekt
ablakban a modul nevre, majd a Build Tools-n<'il vlasszuk ki a BCC32-t (mely maga
a C++ fordt). Amennyiben a Iinkelst szeretnnk sajt vgrehajtani, kattint-
sunk jobb egrgombbal a projekt nevre, majd a13uild Tools-nl vlasszuk ki
az ILINK,,2-t (ez a krnyezethez mellkelt linker)
A fejlesztsi ciklus
Ha minden program prblkozsra tkletesen akkor a fej lesztsi cik-
lus egyszeruen gy nzne ki: programrs, a forrskd lefordtsa, linkels s futtats .
Sajnos azonban csaknem minden prognlm - mg a is - tartalmazhat-
nak s tartalmaznak is hibt. Nhny problma mr a fordtsnl jelentkezik, egyesek
a linkelsnl, de olyan is szp szmmal akad, amelyekre csak a program futtatsakor
deru l fny.
nSyntax error" (nyelvi hiba) hiba fordtskor jn ehi Ez azt jelenti, hogy hibt
vtettnk a nyelvtanban. Tallkozhatunk ezen kvl "warning" (figyelmeztets)
hibval is . Ilyenkor hogy tnyleg hibztunk, de a fordt el tudta kszte-
ni a trgykdot, men valahogyan rtelmezte a hibs kdot is, csak pp gyansnak ta-
12 11. rsz Bevezets a C++ programozsi nyelvbe
llta. Linkelsi hibazenetet leggyakrabban hinyz fggvnyknyvtrak va!,'Y elg6pelt
fggvnynevek okozhatnak, Azok a hibk, amelyekkel a program fuUatsa kzben ta-
llkozunk, logikai hibk,
Teljesen lnyegtelen, hogy milyen hibba botlunk, ki kell javtani a forrskdot,
utna pedig jra le fordtan i, jr.! kelllinkelni s j ra le kel! futtatni az alkalmazsun-
kaL Ezt a folya matot mutatja be az 1.3-as ;bra. L1that6, hogy in egy ciklusr61 van sz.
Nagyon ritka az a program, amelyik hibtlanul fordthat, s radsul
mg hibtlanul is fut.
Start
Igen Fordftsi
hibk?
Igen Futsi
'----'-<. hiba?
N,m
Ksz
1.3 bra
A C++ program/ej/esz/s lpsei
1. ra lpsek 113
HEllO.CPP - Az els C+ + programunk
A C-vel rokonsgban ll programozsi nyelveket oktat knyvek krben mr hagyo-
mny, hogya Hello World szavak kiratsa az program. Ezt a hagyomnyt - me-
lyet Kernighan s Ritchie C szl knyve indtott el - mi scm kvnjuk meg-
szaktani.
Aprop
j program ltrehozsa
C + +8uilderX-ben j projekt ltrehozshoz kattintsunk a New Source File-re (j
forrsIlomny ltrehozsa). A knyv pldihoz mindig a Console Application-t (sz-
veges alkalmazs) vlasszuk. A projekt ltrehozsa utn elkezdhetjk a munkt
a
Gpeljk be dZ prog,dmot a Ha
snk szerint nem vtettnk mentsk, fordtsuk le, linkeljk ssze - amennyiben
a fordt6 ezt nem teszi automatikusan - s pr6bljllk meg elindtani.
II J Jell0 World szavak jelennek meg. )elenesetben nem maga II program a lnyeg, ha-
nem az, hogya fejlesztsi ciklust s a fordtt megismerjk. Pr lecke utn teljesen vil-
goss v{tlik majd a program
Aprop
Nhny sz a knyvben tallhat forrskdokrl
Az albbi forrskdban a sorok az adott sor szmval Ezek csupn hi -
vatkozsok megknnytse vgett vannak ott. Az 1.1-es li sta O. sora pldul gy nz
ki begpelv"e:
#include <iostream>
A sorszmok teht megknnytik a magyarz szveg rtelmezst. Egyes
krnyezetekben - ilyen pldul Borland is - szint n tallkozhatunk sorszmozssal,
de ezek nem rszei a forrskdnak.
A knyvben minden program sorszmozsa a o. sorral mert maga
a C++ nyelv is O-rl kezd a szmozst. A korbban bemutatott krnye-
zetben a szmozs de ha ezt valaki zavarnak tallja, nyugodtan ki-
kapcsolhatja. Ezt a lools men Editor Options menpont jban tallhat Une
Numbering kikapcsolsval tehetjk meg.
A knyvben tallhat sszes forrskd a mellkelt CD lemezen is megtallhat,
mgpedig a programot bemutat blokk fejlcben nven.
14 11. rsz Bevezets a C+ + programozsi nyelvbe
\.\ usta - hallo.cpp. az eII6 C+ + __
o: 8include <iostrcaffi>
1.
2 , int main()
,.
4 : std : : cout "Hello World!\n";
5 : ret.urn O,
,.
Gy6z6djnk meg rla, hogy hibtlanul gpcltk be a kdot, klns tekintettel az spe-
ci{llis r.isjdckrc. A 4. sorban tallhat6 egy tidmytst jelkpez. Angol kioszts bi!-
lcntyuzcten nyomjuk le egyszerre a Shiftet s a v(.!ssz6t. (Magyar kioszts esetn hasz-
nMjuk az AltGr s a billenty{ikombinci6t.) A 4. sort pomosvesszO:vel fejezzk be, fi-
gyeljnk r.
Aprop
Nevek s nvterek
Az std: : cout parancs kt rszbl ll: std s cout.. A cout -tal frathatunk ki va
lamit a Ez rsze az alapcsomagnak. Minthogy azonban sok ember r j
fggvnyeket s objektumokat a C++-hoz, knnyen hogy ugyanazt
az azonosltt hasznljk ms clra. Hogy ezeket megkmnbztessk, meg kell ad-
nunk a hasznlni kivnt nvteret vagy vltozatot is. Jelen esetben teht Igy kzl
jk, hogy az std csomagban cout objektumot szeretnnk hasznlni.
Fontos, hogy pontosan a fordtprogram dol.:umentci6jnak megfelel6en jrjunk el.
A legtbb fordt - gy a Borland is - aUlomatikusan sszeszerkeszti a t.'rgykMot-
vllgy trgykdokat - futtatbat lJomnny, de ha ms fordtt hasznlunk, minden-
kpp olvassuk el a lersl. Ha hibazenetet k:lpunk, nzzk meg alaposan, ho&')'
ugyannt gpdtk-c be, mint ami a korbbi l.l-es progmffi k6djban lthat. lIa nem
a l3orhll1d fordt6jt hasznljuk, tovbbi hibazeneteket k:tphatunk. I [a O. sorra a rend-
szer a find iostream
H
hibt adja fordtskor, akkor II fordt nem tall ja a meg-
felelO: fejlcllornnyt. Ennek a helyt a fordt konfigurds !1omnyhan vagy kr-
nyezeti v ltozk segtsgvel llthatjuk be. Ha a fordt II 2. sornl nem tallja
a main () fi.lggvny prototpust, akkor egy int ma i n () ; sort kelJ a msodik sor el
beszrni Ebben az esetben ezt a knyv sszes pldjnl meg kell tennnk. A legtbb
fordt nem ignyli ezt (a 130rland sem), de nhny igen.
A mdosts utn gy nz ki a programunk:
o: tinclude <iostrearn>
1 .
2 : int main() ;
3 : int main!)
4: {
5: std :: cout "Hello World!\n';
6 : return O;
7 .
1. ra lpsek 115
Prbljuk meg lefordtani a hello. cpp llomnyt s futtassuk le. Ha mi ndent jl csi -
nltunk, kirj a a hogy:
He l lo Worl d!
lia sikerlL, akkor gratullok, sikeresen begpeltk, lerordtottuk s lefuttattuk
C++ programunkat. Szinte hihetetlen, de csaknem minden profi C++ programo-
z s7:mra ez volt az program.
Fordftsi hibk
Szmtalan oka lehel a fordtsi hibknak. A leggyakoribb az e!gpels vagy ms apr
hiba. Nhny fordt nemcsak a hibra mut.1t r, de arra is, hogy az a forrskdban hol
van. Nhfiny akr mg javtiisi tanccsal is szolglhat
Nzzk meg, hogy reag l a fordt6tlk egy sZ{lI1dkosa.n elhelyezelt hibm.
Ha a HELlO.CPP hibtlanullefutot! , (Igy n(:zzk meg, mi trtnik, ha trljk a 6. sorbrm
tallhat kapcsos zrjelet. A programunk az 1.2 programlism msa kell, hogy legyen.
1.2 Ua .. - Plda a forditai hibra (hallobad.cppl
o : #include <iostream>
1.
2 : int main()
3 .
4 : std : : cout "Hello World! \n' ;
5 : rctllrn O;
Fordtsuk j ra a programot. Az albbihoz hasonl hibazenetet fogunk kapni:
"hellobad . cpp : E2134 Compound statement mi s .s i ng } in function main (
at line 7
A hibazenet - noha kiss rej tjclesnek - kzli, hogya problma a forrskd v-
gn tallhat. A 7-es sorra hivatkozik, hiszen az lenne a sor a
ben. Sokszor a hiba kzvetlen a problma kzelben tal lhat. Amennyiben a fordt
pontosan azonost nli nden problmt, megprblja kijavtani forrskdot.
Aprop
Emlkeztel a knyv forrskdjaival kapcsolatban
Ne feledjk, hogy a knyvben a forrskdok sorai tallhat sorszmozs csu
pn referencia. A szmozs - akrcsak nhny fordt esetn - , O-rl indul. Ms
fordtk - gy a Borland is - viszont kezdik a szmozst.
1s l l. rsz Bevezets 8 C++ programozsi nyelvbe
Krdsek s vlaszok
Kerds: Mi (l klnbsg az egyszef s az irodai Mztt?
V/asz: Az egyszeru egyszenl szvegfjlt kszthetnk. Semmi olyan
specilis jel vagy nem kerl bele, amely az irodai szvegszcrkeszt6nl igen.
Az egyszenl szvegfjlok nem tartalmaznak automatikus sortrst, flkvr, il letve dall
betUket stb. Termszetesen az irodai szvegszerkeszt6kkel is menlhetnk egyszen1 sz-
veg formtum az esetek nagy rszben, de krtiltekint6en kell eljrnunk.
Krds: Afordt6m bepftcfI sz6vcgszerkeszfvel rendeU.tazik. llasznljam inkbb az t?
Csaknem minden fordt kpes szi nte brmilyen szvegszerkeszl{Svl::1 rt forr.1s-
kd lordtsr:1. A beptett tbbnyire az, hogy felgyorst ja a fo.::jlcsz-
ciklust. Komolyabb fordtk sszkomfortos szerkesz16felletle! rendelkcwck, mely
a fejlcszt6i krnyezet elhagysa nl kl segt megoldani ;_ fordtsi s trgyk6dszerkesz-
tsi problmk:lt, de sokszor tallunk gyors segtsget is. Termszetesen a klnll
szerkeszt6nek is megvmumk az el6nyei. Rendelkezhet pldul olyan kiegsztsekkcl ,
amellyel a fcjleszt6i krnyezet nem. De az is el6fordulhat, hogy mr rnegszoktuk s
hatkonyabb a 111lJnkavgzs vele, mint a beptett szerkcszt6vel.
Krds: FilJye/men kVlllhagyhatom a fordt6 fi8yellllczlelseit?
Vlasz: Nem. Swkjuk mcg, hogya figyehneztet6 i.lzent:tek is hibflk. A C++ fordtja
minden esetben szl, H111ikor olyan dolgot cseleksznk, amely nem ajnlott. Tegyi.lk
meg a szksges lpseket, hogya figyelmcztctsek is e1ttlnjenek. A hibazenet azt je-
lenti, hogya fordt a forrskMunkat nem ILldja gpi k6dd alakt.ani. A figyelmeztets
azt jelenti, hogy sikerlt ugyan lefordtani, de nem biztos, hogy gy, ahogyan mi sze-
rettk volna.
Krdes: Mil jeleni az, hogyfordirs; id?
Vlasz: A fordtsi id6 az az id6, amikor a fordt fut. A Iinkelsi - vagy szerkesztsi-
a<:, amikor a li nker fuI. A futsi pedig amikor maga a programunk
Gyakorlatok
Ebben a szakaszban oly:m kvzkrdseket s gyakorl6feladatokal gytljtnnk ssze,
melyek segtenek megszilrdt.ani az elsajtton tuds!.
l. ra 17
Kvfl
1. Mirt fomos projektet hasznlni?
2. Mi a hibakeress clja?
3. Mirt rdemes olyan fordtt hasznlni, me!y tmogatja a nemzetkzi
sZbvnyokat?
4. Milyen segdprogramokkal $zerkeszthet6 a forrskd?
Feladatok
A feladatuk teszik az nll gyakorlst. Nincs egyetlen helyes megoldsuk.
1. Pr6bljuk ki a krnyezet gombait s menit. Mit csinlnak? Knnyebb
teszik az letet? Vagy ppen megneheztik?
2. Pr6bljuk meg lefordtani, sszelinkeini s lefull:!lni a krnyezethez
mellkell pldkat. Vessnk egy pillantst a forrskdra, hogy kitalljuk mirt s
hogyan keletkezik a vgeredmny.
3. Pr6bJjuk ki a Borland - vagy brmely ms - fordt parancssoros vltozatt.
Knnyebb szerkeszleni, fordtani, linkelni, futtatni ms eszkzkkel? Vagy
az integrlt krnyezet knnyti meg a helyzetnket?
Vlaszok a kvfzkrdsekre
1. A projekt sszefogja a futtathat ,11lomClnyhoz szksges komponenseket. Egy
aJk,llmazs sok-sok f:jJt de projektbe sszefogva egytt
kezelhetek, t l{IlJmtak.
2. A hib:lkeress clja termszetesen a hibk (bug) felkutatsa. il yenkor olyan logi-
kai hibkat keresnk, melyek a program fordtst nem befolysoltk ugyan, ele
az mgsem aZlleszi, amjt a programoz elkpzelt.
3. Az egyszeru vlasz: kveti a szablyokat. A fordttl elvrhat, hogy minden
esetben ugyangy viselkedjen. Taln nem is gondoln a kedves Olvas, de mg
a benzinkutakrl s az autk benzintankjr61 is szabvny rendelkezik. Ha min-
den gyrt sajt feje utn menne, akkor nem lenne biztos, hogy A gyrtmny
autba B gyrtmny benzinkton mdunk tankolni.
4. Brmilyen programot hasznlhanmk, amely kpes ASCll szveget
menteni. Hasznlhat juk az opercis rendszerhez mellke[t (DOS
alatt az edit, Uni..Vlinux alatt a vi s az EMACS, Windows alatt a Jegyzettmb),
kereskedelmi alkalmazst (mint pldul a BrieO, integrlt fejleszt6i krnyezetet
vagy akr egy irodai is. A lnyeg csupn az, hogy tudjon for-
mzs nlkli szveget menteni.
2. RA
Egy C++ program rszei
Ebben az rban a esik majd sz:
Mikor megfelel6 vlaszts a C++ nyelv
Milyen rszekbl ll ssze egy CH program
llogyan al kotnak egszet a rszek
Mik a fggvnyck, s mire hasznlhat6k
Mit611ehet j vlaszts a C+ + nyelv
M;:mapsg il legtbb profi C++-ban dolgozik. Ennek az az
oka, hogy ezen a nyelven gyorsan mgis kis mretG programokat rhatunk,
ehhez pedig egy robus:ltus s platformok kztt knnyen hordozhat kr-
nyezet ll rendelkezsnkre. A ma hasznlatos fejlcszt6eszkzk segtsgvel kifejezet-
ten sszetett s hatkony kereskedelmi alkalmazsokat rhanlOk viszonylag egyszeru-
en, m ennek ra van: meglebetsen alapos ismeretekkel kell rencleJkeznnk a C++
nyelv szolgltatsir61.
20 II. rsz Bevezets a C++ progfllmoz.si nyelvbe
Mfls programozsi nyelvekhez kpest a C++ viswnylag fiatalnak szml. Persze az is igaz,
hogy maga a programozs is mindssze hatvan ves mltra tekinthet vis.<;za, de a C++
mg ezen a skltin scm szmt rginek. Az nyelv megszletsc ta a progrdllloti'ls
mdszertana igen jelents fejl6dsen esett t, amelynek egyik lpfse ppen a C++ volt.
Ez a nyelv ugyanis trtnetileg a C nyelv tovbbfejlesztsnek Mivel pedig
maga a C is minJssze 30 ves, vilgos, hogy a C++ sem lehet ennl
fl. programozk kez<.!(!llx:n ,l legegys7.erub gpi urastsokkal, vagyis gpi kd-
ban dolgoztak. Ennek a nyelvnek az utastsai egyes(!k s nullk hossz sorozataibl
llnak, ami mdon nem tl knnyen kezc1hel6. Hamarosan megszOlettek tehl
az els6 assemh1cr(!k, amelyek ember szmm is olvashat reprezenlflcikat, gyneve-
zett nmemonikokat rendeltek a gpi utastsokhoz. Il yen volt pldul az ADD vagy
a MOV, amely(!k egy-egy konkrt gpi k{x.! mOvc1elnek meg. Id6vel aztn
ki<llakultak az gynevezett maglIs programnyc1ek is, mint amilyen a BASIC
a eOUOL. Ezek a nyelvek m(lr tettk, hogya progr.unozk olyan a szavl\k 6s
mondatok kz es6 kifejezsek segtsgvel alkoss k meg progmmjaikat, mir1t p6kl(lUI
Let I = 100 (legyen az T tartalma 100). Ezeket:1 magas szinn1 rmlvdewkcl az-
tn az gynevezett rtelmez6k (inlerpereter) vagy fordtprogramok (compiler) vissza-
fordtottk gpi nyelvre. Az interpcrclerek, mint pldul a I3ASIC megval6st:,:ai
.olvass kzlx:n" fordtj:'ik le gpi nyelvre II magas szinn1 utasitsokat, majd azonnal
vgre is hajtjk azokal. Itt teht a begpch kd gyakorl atilag lIzonnallefut.
A fordtprogramok (compiler) ezzel szemben elbb vgigulv:lssk a teljes forrsk-
dot, s abh61ltrehozn:1k egy 511om(tnyt (objecl code). A feldol-
gozsnak ezt :lZ lpst nevezik fordtsmk (compiling). A fordt teht egy l:rgy-
kd llomnyt (object file) llft amit ti msodik a (linker) ala-
kit full:ltllat progmmm:i. A futtathat progmm az az :illmny, amit aztn az open'\ci6s
rendszer segtsgvel lefutlatharunk. (Zrjelben taln rdemes megjegyezni , hogy
aZ itt emltett lrgyk6dnak (object code) semmi kze sincs a knyvben ksob trgya-
land objektumokhoz.)
Mivel az interprcterek kzvetlenl vgzik II gpi kdra alaktst s a vgrehlljtst,
a programoz szmra rendkvl knye\mesen hasznlhatk. fl. fordtprogl1lmok ez-
zel szemben kiss k6nyclrnetlenek, hiszen csak tbb l6p6sben
lthat a futtathat llom{my. H,l ;lzonban jobban megvizsgljuk a dolgot, kiderl,
hogya knyelem elvesztse haszonnal is jr: az gy ltrehozott gpi kd sok-
kal gyorsabban fut, mint amilyen sebessggel az incerpreterek kpesek.
A programozk clja hossz veken t az voll, hogy kis mret, gyorsan fut
programokat alkossanak. A programnak azrt kellett kicsinek lennie, mert drga VOll
a memria, a sebessg s hatkonysg pedig azrt volt alapkvetelmny, mert a h6s-
korban a szmtsi teljestmny sem volt klnsebben olcs. Aztn ahogya szmt-
gpek egyre kisebbek, gyors:tbbak s olcsbbak lettek, s ahogya memriarak is
visszaestek, a kapcsolatos is megvltoztak. Manapsg
2. ra C++ rszei 21
a programoz munkabre sokkal de sokkal magasabb, mim az t foglalkoztat vllal-
kozs ltal hasznlt brmelyik szmtgp ra. Ennek ma az igazi rtkel
a jl megrt s knnyen karbantarthat programkd jelenti, nem a hardver. A .jl meg-
irt" bizonyra nem kell magyarzni, a pedig :IZt jelenti,
hogy ha a szoftver szolglt:llsaira tmaszkod vll alkozs ignyei megvltowak, ak-
kor a programot klnsebben nagy beruhzs vagy nl kl t lehessen rni,
vagy szolgltatsainak krl ki \chessen terjeszteni.
Procedurlis, s objoktum-k2pont programfojleszts
A procedurli s vagy djr-ds kzpont fejleszts alapelkpzelse szerint a progr.un nem
egyb, lrlint a adatokon vgrehajtand sorozata. A stmkturlt prog-
ramozs nagy tallm:1nya ezeknek a a rendszerbe szervezse, szisztema-
tikus megkzeltse volt, mgpedig azz<l l a cllal, hogya programukk<ll nagy mennyi-
Sglt adatot is knnyen s tlthat mdon lehessen kezelni.
Amgy ez az tlet egy:'iltaln nem j, hiszen ha jobban belegondolunk, semmi msrl
nincs sz, mint az meg s umlkodj" elv digitlis alkalmazsrl. H:l teht egy
olyan feladattal tallkozunk, amelynek a megolds.a tlsgos:m sszetett :lhhoz, hogy
egyszeruen s knnyen mdon le tudjuk rni azt, akkor elkezdjk logikai
rszfeladatokr-.t bontani, s ezt egszen addig folytlltjuk, :lmig a rszek mr kell6en
s ltal:'inosak, s gy knnyen rthet6ck.
Nzznk egy pkh'l. I-la az a feladat., hogy ki egy vllalat valamennyi :l lk:ll -
mazottjnak liagkeresctt, akkor a dolog sszetettnek
Ugyanakkor nl!mi gondolkodssal a kvetkez6 rszekre bonthat juk a megoldand
problmI:
1. Ks:dtsilnk egy !istl, ami tartalmazz.1 az sszes dolgoz brt.
2. Szmoljuk meg, hny alkalmazottja van a cgnek.
3. Adjuk ssze :l fizetseket.
4. Osszuk cl egymssal az imnt kapott kt szmot.
A vllalatnak nyilvn V:ln valamifle adatbzisa, amelyben a dolgozk adatait trolja,
teht a fizetsek sszegzshez a rszlpseket kell vgrehajtanunk:
l. Nyissunk meg egy adott dolgozhoz tartoz bejegyzst.
2. Emeljk ki az adacszerkezetbl a fizets rtk\.
3. Adjuk hozz a kiolvasott rtket annak a vltoznak a tanaimhoz, :Imely
az sszeget fogja tartalmazni.
4. Nyissuk meg a dolgoz bejegyzst.
22 11. rsz Bevezets a C+ + programozsi nyelvbe
A dolgozi adatok kiolvassnak teljesen hasonlan a kvetkez6 rszlp-
sekre bonthat:
1. Nyissuk meg a dolgozk adatait tartalmaz fjlt.
2. Ugorjunk a kiv{llasZLoU dolgoznak rckordra.
3. Olvassuk fl az adatokat a
sszessgben elmondhat, hogya strukturlt programozs nyjtotta megkzelts
a mai napig rendkivl fontos s hasznos paradigma az sszetett feladatok megolds-
val kapcsohttban.
Ezzel egy(iu azrt marddLak mg jcskn megoldand problC:mk. Ahogy nvekszik
a feldolgozand adatok mennyisge, egyre nehezebb s nehezebb lesz mt!gbirk6zni
az adatok s az eljrsok sztvlasztsval. Minl tbbfle aka-
runk vgezni egy adathalmazzal , annl zavarosabb lesz :l vgeredmny.
A procedurlis megkzeltst alkalmaz6 fejleszl6k azon kapjk maguklH,
hogy mr megint kitalltak egy (lj megoldst ugyanannak a rgi problmnak a kezel-
sre. Erre szoktk krkben azt mond,mi, hogy az ilyen programozk wjra
flfedezik a kereket", s ez az, aminek az ell entte az jrahasznosthat kd. Az j ... .J.-
hasznosts alaptlctc mindssze annyi, hogy a programokat lehet6sg szerint olyan is-
mert tulajdonsgokkal rendelkez6 ltalnos pit6elemekb61 kell sszerakni , amelyeket
szksg eset.n egyszeruen lx:emelhetnk a .sajt kdunkba anlkl, hogy jra mcg kel-
lene azokat rmmk, vagy akr csak meg kellene vizsg:'ilmmk a szerkezetket. Ter-
mszetesen ez a megkzelts sem tlj, hiszen a val6s objektumokkal dolgoz m6rnkk
is pont ezt a mdszert alkalmazZ{Ik. Ha egy villamosmrnknek egy kszlk elkszt-
shez szksge van egy tranzisztorra, nem azzal fogja kezdeni, hogy flfedezi a tran
zisztort, hanem bemegy a raktrba, lecmeli a pokr61 a megfelel6 alkatrszt, vagy ha na-
gyon mus7-j, akkor mdost rajta egy kicsit. Furc.sa kimond.mi , de az objektum-kzpon-
t prog,dm07-s fltallsig ezt a megkzeltst a programozk nem alkalmaztk.
Az objektum-kzpont paradigma lnyege mindssze annyi, hogy az adatokat s a ve-
lk dolgoz eljrsokat egy egysgnek, egy objektumnak tekintjk, amelynek nevet
:lclunk, s amely klnt"le tulajdonsgokkal s viselkedsformkkal rendelkezik.
A C+ + nyelv s az objektum-kzpont programozs
A C++ nyelv teljes egszben tmogatja az objektum-kzpont paradigma alkalmaz-
st, IniVel tartalmazza. azt 3. hrom alapszolgltatst, amelyekre pcve ez megvalstha-
t. Ezek a begyazs (enclIpsulation), az rkl6ds (inheritance) s a tbbalaksg
(polimorfizmus; pulymorphism).
2. ra Egy C+ + program rszei 123
Begyazs (encapsulation)
Amikor egy villamosmrnk egy j eszkzt pt, gyakorlatilag sszeforraszt nhny k-
szen kapott 'Ilkatrszl. Az j eszkz bizonyosan tartalmazni fog pldul ellenllsokat,
konden7.1itorokat s tranzisztorokat. A tranzisztor egy eszkz, amelynek vannak bzo-
nyos tulajdonsgai s viselkedsformi. A mrnk ezt az eSlkzt munkja sorn anl-
kl hasznlhatja, hogy pontosan ismernie kellene annak a bels6 felptst, vagy
kdsi mechanizmusait. Egyszeruen csak annyival kclllisltban lennie, hogy az
alk:ltrsz mire j. Ahhoz, hogy ez a dolog ebben a formba n ;1 tranzisztor-
nak mint alkatrszLpusnak tkletesen meghatrozott visclkedsformkkal s rulajdon-
sgokkal kell rendelkeznie. Egy bizonyos, jl krlhalrolhat funkcit kell megval6s-
tania, de azt teljesen. Ha egy dolog egy funkcit teljes egszben kpes elltni, azt r-
viden l:x::;igyazsnak nevezzk.
Az objektum-kzpont metodolgill szhasznlatval lve a lranzisl'.tor tulajdonsgai be
vannak gyazva a tranzisztor objektumba. Ezek a bizonyos Lldajdnnsgok s funkcik
teh:h nem szanaszt hevernek vala hol az ramkrk dzsungelben, hanem a szerkezet
egyetlen helyre sszpontosulnak. Pontosan addik aztn az az elf5ny, hogy tran-
zisztort hasznlni az is tud, aki ncm is ismeri annak a bels6 vagy relptst
A C++ nyclv a begyazs mcgvalstst II fel h:lsznl6 ltal definilt tpusok, az gyne-
vezett osztlyok hasznlatn kcreszl'lteszi lehetcv. Egy j61 tgondolt s felptett osz-
tly miutn ltrehoztuk pontOSan gy mint egy teljesen begyazott egyed.
Egyetlen egszknt haszml1mtjuk, de nem kell tudnunk, hogy mi van benne pontosan,
s az hogy A mechanizmus a felhasznl6 el6tl lt.1lban teljesen
rejtve maradh:ll, C&1k aZI kell tudnia az hogy pon{osan mire val az adott
elemtrpus, s hogyan kell azt hasznlni. Az osztlyok ltrehowsr6l II 7. rJ
anyagban lesz sz6 rszletesen.
s
Az 1980-as vek vgn aCiLibanknl dolgoztam, ahol az volt a feladatom, hogy fej-
lesszek ki egy eszkzt, amivci az gyfelck otthonrl intzhetik banki gyeiket. Mivel
gyors:1n pi:1crn akamtnk kerlni ezzel a szolgltatssal, nem a scmmib6l kezdtem cl meg-
tervezni a kszlket, h,mcm egy mr dologbl, nevezetesen a tdcfonb! indul-
tam ki, s annak a kpessgeit fcjlcsztctLem tovhb a bank ignyeinek megfcleWen. gy
is fogalmazhatnk, hogy amit vgl megcsinltam, az egyfajta telefon volt, de nhny
extr-.!. szolgltatssal kiegsztve, hiszen a megval6sts sorn vgig tmaszkocltam a mr
meglv6 funkcikra, pldul a Ivsok kezelsre, viszont ahol kellett, ott tovbbfejlesz-
tettem azokat. Kicsit tmrebben jrahasznostottam II telefon meglv6 funkciit.
Ugyanez! a dolgo! a C++ is tudja, hiszen az keresztl tmogatja a k6dok j -
mhasznostst Egy j tpust, vagyis egy j osztlyt ugyanis ltrehozhatunk egy mr
24 11. rsz Bevezets a C+ + programozsi nyelvbe
meglv6 alapjn is. Ilyenkor azt mondjuk, hogy az j alosztly t a rgib61 szrmaztat juk,
az ltala kpviselt felhasznli tpust pedig szrmaztatott tpusnak (derived lype) nevez-
zk. Ezzel a S7..6ha.sznlattal lve teht az n .felspcizen
H
telefonom nem egyb volt,
mint egy a kznsges telefonok osztlybl szrmaztaton j telefontpus. Szrmaztats-
nl az j osztly rkJi a rgi ntinden tulajdonsgt, de annak funkciit jakkal is kieg-
szti. Az rkl6dsr61 s annak hasznlatrl a 16. rban lesz majd sz rszletesen.
Tbbalaksg (polimorfizmus)
Egy okos telefon ugyanabban a helyzetben nha mshogy viselkedik, mint egy kzn-
sges kszlk. Ha hvs fut be, akkor a hagyomnyos telefon egyszen1en meg-
csrren. /\7. okos kszlk ezzel szemben bekapcsolja a kperny6 vilgtst, ma jd em-
beri lmngon kzli "lIv{\sod van kedves gazdm". A dologban a legrdekesebb n,
hogy mindehhez a leJefontrsasgnak semmi kze sincs. Hvskor ugyanaz
a jt'l fUl be a buta 0s okos telefonba, csak az erre :IdOlt v51as7.Uk tr el egym(\stl.
Az egyik csng, ;1 msik beszl, vagyis mindkett6 ppen a "megfelela dolgot" esini lja
a jelre.
Az cffi:le viselkedsformk
H
megvalstst :l C++ is tmog!ltja n gynevezeu
tbbalak.sgon (polymorphism) keresztl. A progr.unokban fggvnyek s osztlyok
egyarnt mUlathmnak tbbalaksgOl, ami nagy vonalakban annyit jelent, hogy egy
prug ..... .unban lIgyan: .... a nvvel egy fggvny vagy osztly tbb klnbz6 megval6s-
lfisa is ltezhct, 6s ezek minden helyzetben ppen a megfelel6 dolgot csinljk. A tbb-
:Ilaksgrl, s annak kifinomult hasznlatrl a 17. s 18 rban lesz sz b6vebben.
Egy egyszeru program rszei
Az ds6 r.ban mr ltlunk egy egszen egyszeru C++ progmmol. Ez volt a he110.epp,
amelynek cgyszcrGsge dlenre smos rdekes pt6eleme van. Ebben a szakaszban
kzc1ebbr6l is megvi"_'>gljuk a program felptst. A progmm k6dja, amit ill csak
a knyelem vgett ismuek meg a 2.1 Listban lthat.
2.1 Lista - A hel10.COD Droqram ellYSZersae ellenre k1vlan alkalmu IHIV C+ +
program pft6elemeinek bemutatsra
o: <iostream>
"
2 : int main ()
3 : t
4: std :: cout 'Hello World!\n';
5 : return O;
6 ,
2. ra Egy C++ program rszei 125
Hello World!
A O. sorban beemeljk a program k6djba az iosLream fjl tal1alml. A fordt-
program szempontjbl ez gyakorlatilag ugyanolyan, mintha begpeltk volna
a hello.epp fjl elejre az iostrcam nevl fejlcll omny teljes taltalmt.
Az #include utasfts vizsglata
Amikor elindtjuk a rordtprogramoL, az el6szr is meghv egy msik programot,
az gynevezett (preprocessor). Az el6fddolgoz6t soha nem kell kzzel
indta nunk, ezl a fordtprogram mindig megteszi helY(;Hnk.
A O. sor karaklere egy kett6skeresZl (#), ami nem m,s, mint egy az eI6felc1olgo-
znak szl jelzs. Az el6feldolgoz ugyanis els6 kzellsben semmi egyebet nem
tesz, mim vgigolvass,1 a forrskdot, s olyan sorokat keres benne, amelyek
Ha wll ilyent, akkor al utna szerepl6 utastsoknak
mdosuisokat vgez a fornskdon. Amit teht a fordtprogram tnyle-
gesen megkap, az mr ez a mdostott vltozat lesz.
Az teht olyasmi, mint knyvnl a szerkeszt6, csak ez fordt;\si id6ben
6s forrskdot szerkeszl. Ezt az aUlOl11atikus a fent emltett
el6feldolgosi direktvkkal (preprocessor directive) vezrelhetjk.
/\ kellskereszt utn sz, az include egy ilyen, az e16feldolgoznak szl
utasls, amely aZl mondja: "Ami most kvetkezik, at; cgy fjlmk a neve lesz. Keresd
meg ezt a fj lt, vedd a teljes tartal mt, s szrd be ide, ahol n vagyok." Ha a fordt6-
progJ<ltllUnk jl van belltva, akkor megkeresi a kztt megadott
iostream nevu fj lt abba n a knyvtrban, ahol a fordt fejlcllomnyai (header file)
ta llhatk, s becmeli a Larlalml a forrskdba. Ezeket a fj lokat szoks amgy "h fj-
loknak" vagy "include fjloknak" is hvni, a neviik pedig rendszerint . h kiterjesztssel
Aprop6
A fejlcllomnyok kiterjesztseirl
Gyakori, hogy az j ANSI szabvnynak fejlclJomnyoknak semmifle ki-
terjesztsk nincs. Ugyanakkor a "trtnelmi hagyomnyok" miatt a legtbb ford-
tprogram ktfle vltozatot is tartalmaz Az egyiknek a rgi, a msi k mr
az j szabvnyhoz igazodik. Ha pldul megvizsgljuk, hogy az imnt emltett
26 11. rsz Bevezets a C+ + programozsi nyelvbe
i ostream llomnnyal mi a helyzet, igen nagy kt vltozatot
is tallunk majd belle. Mi ebben a knyvben mindig az j szabvnynak megfelel
vltozatokat fogjuk hasznlni, hiszen a msik garnitra elavultnak szmt.
Ugyanakkor ha valaki egy rgebbi kiads fordtprogramot hasznl, akkor knyte-
len a hagyomnyos rsmdot alkalmazni, vagyis ebben az esetben a O. sor helyes
alakja a
<iostream.h>
Az i ostream Onput-output-stream) fejlcllomny :I COUl hasznlata mi aU
van szks(:gnk. Ez az az utas1"t{ls, amivel a kperny6re tudunk rni dolgokat.
Figyeljk meg, hogya cout-ot egy s td : : jeJz6, ami a fordtprogram szm-
ra azt jelenti , hogy a szabvnyos be/ kimeneti knyvt ml kell hasznlnia. Hogy ez a do-
log pontosan hogyan is m('ikdik, s mi is az, ami ilyenkor a httrben trtnik, majd
az elkvctkez6 6r{lk sorn fog kiderJni. maradjunk annyiban, hogy
az std , : cout az lIZ objektum, ami a szabvnyos kimenetet kezeli, testvre {X..odig,
az std : : cin, ugyanezt teszi, csak abemencttel.
Amint azt mr emlt ettem, H nulladik sorban i ncl ude direktva hatsa pontosan
ugyanolyan, mimha a k6cl elejre bcgpeltk vol na az iost erarn ll omny teljes tartal-
mt. A.mikor a fordtprogram megkapja a forrsfjll, ;lbban mr Olt van ez a t::ut:l loln.
Elemzs soronknt
A program tnylegesen a 2. sorban ahol rgtn egy main () nevli fggvnyt
IMunk. Minden C++ programban kell lennie egy il yen ncvl.1 fggvnynek. A rggvny
gy l talban vve nem egyb, mint egy k6drszlet, :unely egy van tbb m('iveletet hajt
vgre. A fllggvnybe n foglalt vgrehajtst szoks a f.iggvny vgrehajts-
mik vagy meghvsinak is nevezni, s taln az sem tl meglep6, hogy fggvnyek is
mcghvhatnak ms fggvnyekel. A main () mindazonltal a fggvnyek kzlt speci-
lis helyet foglal el , mivel ez a program belpsi pontja. Ez azt jelenti, hogy amikor el-
indtunk egy lefordton programot, akkor a rendszer automatikusan a main () fggvny
vgrehajts;val kezdi a sort.
A main () megadsnl - akrcsak az sszes tbbi fggv(>nynl- meg kell mon-
danunk, hogy az milyen tpus rt(:ket fog visszaadni. Ezen a ponton a main () megint
klnlegesnek szmt, mivel ktelez6en egsz (integer) rtkkel kell visszatrnie. Ezt
a tpust a CH nyelvben az int kulcssz jelzi, de err6! majd csak a harmadik rban lesz
sz. Ami pedig a visszatrsi rtkeket illeti , a 4. rban tanulunk. majd
a kifejezsek s utastsok kapcsn.
2. ra Egy C++ program rszei 127
Tudta hogy ... ?
rtkek visszaadsa?
A main () fggvny ltal visszaadott egsz rtket maga az opercis rendszer veszi
t. Ez azrt hasznos, mert ez az egyetlen szm bizonyos hiballapotok
}elzsre. Ez amgy teljesen ttalnosan hasznlt mdszer a termelsi vagy ktegelt
feldolgozst rendszerekben. A dolog a gyakorlatban gy nz ki, hogya program
ltal az opercis rendszernek visszaadott hibakdol egy msik program vagy szkript ki
tudja olvasni, s meg tudja tenni a lpseket, hogy rtestse a kezelket. (Ha
pldul egy kifejezetten nagy adatfeldolgozsi folyamatrl van SZ, akkor
zeneteI kl d egy szemlyhvra, termszetesen szigoran az jszaka kells kzepn.)
Minden fggvny trzse egy nyit kapcsos Lr6jellel kezd6dik, s - nem tl meglep6
mdon - ennek <I zr prjval Amint lthat, a mi main () tUggvnynk
nyit 6s zr kapcsos z{lfielei a 3. s a 6. sorba kerltek. Minden, :uni e kztt a kt
z.'i rjel kztt lnllhat, a fggvny rsze. A kapcsos :dlr6jclek egybknt programblok-
kok jellsre hasznhlLOsak. Nlen esetben a fggvnyt/..set, mint nll egysget ha-
troljk, dc ks6bb egyb blokkfajtkrl is olvashatunk majd.
Programlmk veleje a 4. sorban lthat. Itt a cout objektum segts(:g(:vd a k6pcrny6re
kldnk egy dv:d zenetet. Az objekrumokrl rszletesebben majd a 8. rban lesz
sz. Most d 6gedjnk meg annyival, hogya coul s cin objektumok <I C++ progr:amok-
ban adottak, azokat a fordtprogr"'dm hozza llre, v .. gyis neknk c-S;;lk has7.nl-
nunk kell 6kct. A cout a rsra, a cin a olv:lssr::1 v:ll 6.
Nos, akkor vizsgljuk meg kzelebbr61, hogyan is kell hasznlni pontosan ezt a bizo-
nyos cout objektumot. EI6szr is rjuk le magnak a cout-nak a nevt, azt!in ur!ina
rgtn a kimenet !i tirnytsmk opertort (<<). Utbbi nem egyb, mint kt egyms
ut n rt ki sebb-nagyobb jel, vagyis senki ne keresse a bil1entyl.1zeten. Brmi , :unit ez
utn az opertor utn nlnk, a progmm futsa kzben kikerl a Ha egy
szveget - vagyis egy karakterlncOl- akanmk kiratni, ne felejtsk el
lek kz zrni azt (Igy, l.llninl az a 4. sorban is lthat. f igyeljk meg, hogy magt a ki -
mnd szveget nyomtathat karakterek alkotjk, a sor vgn azonban van egy rde-
kes jel , az a bizonyos \n . ez nem egyb, mint az jsor kar::lkter, vagyis egy olyHn nem
nyomta that jel, ami arra utastjH H cout objektumot, hogy emelj en sort :l
A vgeredmny teht az lesz, hogya Hello World! mondat kl n sorb;ll1 jelenik meg.
Az 5. sorban az opercis rendszernek O rtket Hdunk vissza. Egyes rendszereken ezt
a szmot sikeres vagy sikertelen vgrehajts jelzsre swks hasznlni. 1\ megegyezs
szerint nulhl ti sikeres, az rtk a sikertelen vgrehajtst jelenti. Ugyanakkor
hozz kell tennnk, hogy a modern, grafikus felleuel elltott opercis rendszerek-
ben ezt a szolgltatst gyakorlatilag semmire nem hasznljk, gy az ebben a knyvben
bemutatott valamennyi program nulla rtkkel fog visszatrni.
A main () fggvny kdja a 6. sorban r vget a zr kapcsos zr6jell e1.
28 11. rsz Bevezets a C+ + programozsi nyelvbe
Megjegyzsek
Amikor runk egy progmmot, rendszerinlteljcsen vilgos s magtl hogy mit
is akarunk megvalstani egy adon kdrszleltel. Az emberi termszet azonban mulat-
sgos dolgokat kpes produklni. Ha megnzzk ugyanazl a kristlytiszta kdot egy
hnap mlva, gyakr-.m megesik, hogy mr nem rtjk, mi is folyik ou, vagy legalbbis
hoss7..an kell gondolkodnunk, hogy megrtsk a sajt alkotsunkal. Ez a jelensg pedig
teljesen ltal:nosnak mondhat, hiszen minden valamire val kdban ott van valahol
ez a bizonytalansg. Persze azt nem lehet el5re megmondani, hogy hol lesz, de hogy
oU lesz valahol, az biztos.
Pontosan ennek a kezcll:sl:re tall tk ki a megjegyzseket, amelyekkel nem csak ma-
gunkat segthetjil k meg, hanem msok szmr;] is knnyebben rthet'v tehetjk
az ltalunk rt kdokat. A megjegyzs egyszeruen olyan szvegrsz, amit a fordtprog-
ram figyelmen kvl hagy, e amelynek tartalma alapjn knnyen elclnthet6, mi is fo-
lyik ppen a programnak azon a rszn.
A megjegyzsek tipusai
A megjegyzs tehftt olyan rsz a forrskdban, amelyalefordtott program mO"kdst
nem befolysolja, viszont mankt jelenet annak, aki meg akarja rteni a kdot. A C++
nyelv ktfle megjegyzs hasznlatt tesz lehet6v. Az egyiket kt perjel (J / )
mcg. A tovbbiakban ezt a tpust C++ stlus megjegyzsnek fogjuk hvni. Ennl a t-
pusnl a kt perjel ami utastja a fordtprogramot, hogy az adott sorban :1 jel utn
hagyjon mindent figyelmen kvl, egszen a sor vgig.
A msik tpllS megjegyzs kezdett egy perjel s egy csillag Ct") jelzi, mgpedig eb-
ben:l sorrendben, a vgt pedig egy csillagot perjel ( .. t) mutatja. Az ilyen meg-
jegyzsnl a fordtprogram minden, a kt emltett jelzs kz es szvegrszt figyel-
men kvl hagy. Ezt a megjegyzstpust a tovbbiakban C stlus megjegyzsknt fog-
juk emlteni, mivel valjban a C nyelv hagyatknak tckinthet6. Ha ezt a tpust hasz-
nljuk, akkor gyeljnk r, hogyaforrskdban minden nyit ; .. jelnek meg kell le-
gyen valahol a zr" I prja.
Szmos C++ programoz csak a C++ stlus megjegyzseket hasznlja, a C stlust pe-
dig kizrlag akkor, ha a forrskd egy blokkjt tmenetileg zemen kvl akarja he-
lyezni. Ezt a mdszert szoks .kikommentezsnek" is ncvezni. Fontos megjegyezni,
hogy az gy hatstalantott kdrszlet tartalmazhat C++ stl usti, vagyis kt perjelicI kcz-
d6d6 megjegyzseket is, de C stnusakat nem.
2. ra Egy C+ + program rszei 129
Figyelem!
Kdrszlet zemen Idvl helyezse
Igyekezznk eljrni, ha C stlus megjegyzs segtsgvel akarunk
tmenetileg hatlyon kvl helyezni egy blokkot a forrskdban. Ha ugyanis ez
a kdrszlet ms C stllus megjegyzseket is tartalmaz, akkor megeshet, hogy
csak egy kisebb rszletet sikerl kiiktatnunk, nem pedig azt a blokkot, amit eredeti
leg szerettnk volna. elmondhat, hogya C stlus megjegyzsek
nem gyazhatk egymsba. Hiba van ugyanis a kdban kt nyit I " jelnk, a for-
dtprogram logikja szerint a *j bezrja az sszes megnyitott meg-
jegyzst. Az ilyen hibk elkerlsben nagy segtsgnkre lehet egy j grafikus fej -
krnyezet, amely ms sznnel jelzi a megjegyzsbe tett rszeket, flhwa gy
a figyelmet az esetleges tvedsekre. Szintn j hr, hogya ,.flsleges" zr" 1 je-
leket a legtbb fordtprogram hibnak tekinti, s megll.
Megjegyzsek hasznlata egy egyszenl programban
A megjegyzsek semmiben sem befolysoljk a lefordlott k6dol. A megjegyzsekt61
sem a program, sem annak fordtsa nem les:! lassabb, hiszen a rordtprogmm egysze-
ruen figyelmen kvl hagyja 6ket. A megjegyzsek hasznlatra nllltat pldt a 2.2 tis-
tban lthat program.
2.2 Usta - Megjegyzsolc hasznlsta (comment.cpp)
o: <i ostream>
1 .
2 : int
3 : {
4 : 1* Ez egy C stlus megjegyzs
5 : ami addig tart, amig a fordt
6 : meg nem tallja a zr csillag-perjel * I
7 : std : : cout "Hell Vilg ! \n";
8 : /1 Ez egy e++ stlus megjegyzs . ami a sor vgig tart
9 : sto. : : cout "rtt a megjegyzs vge!";
10 :
11 : /1 Egy sor llhat egyetlen perjel l el inditott mcgjegyzsb6l is
12 : 1* Ugyanez igaz a C sti l us megjegyzsekre is */
13 : r"eturn O;
14 :
Hell Vilg!
I t t a megj egyzs vge !
30 I L rsz Bevezets a C+ + programozsi nyelvbe
A 4. s 6. sorokban l:tlhat megjegyzseket a fordtprogram teljes egszben Ilgyel-
men kvl hagyja. Ugyanez: igaz termszetesen a 8. , ]"t. (:s 12. sorokban lLhat6 sz-
vegrszekre is. A 8. sorban indul megjegyzst a sor vge rja, vagyis ennek jelzsre
nincs szksg. Ugyanakkor a 4. s 12. sorokban lthatk rgi stlusak, tehl itl szk-
sg van az explicit lez.rsrd.
A megjegyzsek olyasmi, antivel kapcsolatban a progmmozknak csak egy kis
csoportja tekinthet6
ltalnossgban elmondhat, hogy br az "olvawkznsgnk" bizonyra ismeri ma-
gt a C++ nyelvet, vagyis elvben el tudja olvasni, amit rtunk, azrt <ll emberek igen
kis hnyada rendelkezik ezzel <I gondolatolvass kpess6gvel. M:1gb61
a kdbl nyilvn egynehm1en kiderl, hogy mi az, ami II programban trtnik. A j
tm::gjegyzsnek az a dolga, hogy vilgoss tegye az olvlls6 szmr d, mU:rt pom az tr-
tnik, ami.
Fggvnyek
Br a main () is egy fggvny, azrt ,I fggv(:nyck egy meglehet6sen swk<ltlan fajtjt
kpviseli. Amint azt mr llldjllk, a main () az, amit az operci6s rendsz:er el6szr meg-
btv, amikor a programunk elindlll. Ezzel aztn kezdett veszi a kd vgrehajtsa,
amelynek sorn a main () egyb fggvnyeket hv meg, s persze a main () ltal indi-
tott fggvnyek is hv haLnak ms fggvnyeket.
Maga a main () mindig egsz, vagyis int tPllS rtkkel tr vissza. Amint azonban
az rk sorn ltni fogjuk, ennek a tbbi fggvnynl nem flttlen kell
gy lennie. Egy fggvny a legklnbzbb visszatrsi nkekkel rendelkezhet, 56t
az sem kizrt, hogy egyltaln nem ad vissza semmit a hv6 flnek. A program kdjt
a rendszer sorrl sorra h:-dadva hajtja vgre egszen addig, amg egy fggv6nyhvshoz
nem rkezik. Ilyenkor a vgrehajtsi sorozat fonaln egy elgazs keletkezik, a rend-
sz:er leflJtt3tja a fggvny trzsben megadott kdot, majd a vgrehajts a fuggvnyh-
vs utni soron folytatdik.
Ez a logika amgy nem idegen a mi ndennapi sem. Kpzeljk el pl-
dul, hogy narckpet ksztnk. Lerajzoljuk a fejnk krvonalt, majd berajzoljuk
a szemeket meg az orrot, de akkor hirtelen a ceruznk hegye. Ilyenkor a meg-
kezdett mveletsorba egy elgazst kell iktatnunk, s vgre kell hajtanunk a . hegyezd
ki a ceruzt" fggvnyt. A fggvny trzsben a rszlpsek tallhatk: sz-
pen abbahagyjuk a rajzolst, flllunk, odastlunk a kihegyezzk a ceru-
2. ra Egy C++ program rszei 131
zt, visszamegynk a helynkre, aztn ott folytat juk a rajzolst, ahol abbahagyruk. (Na
ja, az arckpnkn marad egy ksza vonal ott, ahol a hegy kiLrLt, de ezt majd egy
msik fru,'\'ny elimzi.)
Fggvnyhlvsok
A fggvnyeket lekimhetjk amolyan specilis szolgltatsoknak. Amikor a f6program-
nak szksge van egy ilyen szolgllatsra, akkor meghvja a fggvnyt, majd
annak lefutsa utn ott folytatja a vgrehajtst, ahol az abbamamdt. Ezt a lo-
gi kt szemllteti a 2.3 Lista.
r 2.3 um - fggvnyhlv bemutat .. lcallfunc.cpp)
o: *i nclude <i oat r earn>
1 .
2 : II bemut atsa
3: II Ozenet mcgjclenitse a kperny6n
4 : void DemonstrntionFunction{)
5: {
6 : std : : cout "A DemonatrationFunction foggvnybcn vagyunk\n ";
7 : )
B.
9 : II A main() fQggvny - kir egy Qzenetet , majd
10 : II meghivja a fggvnyt ,
11 : II pedig kir egy msodik zcnct et
12 : int main{)
13 : (
14 : : cout "A fMin fOggvnyben vagyunk\n"
15 : DcmonstrationFunction() ;
16: std : : cout "Ismt a main-ben vagyunk\n";
17: return O;
18 :
lCImiinII J
A main fggvnyben vagyunk
A Demonstrat ionFunction fggvnyben vagy\mk
Isrn6t a main-ben vagyunk
- -.
l
A Demons trationFunction (l fggvny kdjt a 4-7. sorok tartalmazzk. Ez a kd-
rszlet a program elklnlt rsze, vagyis le van benne rva, mit kell csinl ni, de amg
meg nem hivjk a fggvnyt, addig nem csinl senunit. A hvs a 15. sorban lthat,
mel ynek hatsra a fggvny kir a kperny6re egy tjkoztat szvegel, majd visszatr
a hvhoz.
32 11. rsz Bevezets a C++ programozsi nyelvbe
A progr.Hn tnyleges kezdete a 12. sorban lthat. A 14. sorban a main () fggvny kir
a egy zenetet, amelyben kzli, hogy most ppen a main () vgrehajts-
nl tart a program. A lpsben, vagyis a 15. sorban a main () meghvja
a DemonstrationFunction () fggvnyt. Ennek hatsr.! lcfutm.k a Demonstration-
Function () trzsben lert utastsok, ami jelen esetben mindssze egyetlen k6dsort
(6. sor) jelent. Ez kir egy jabb zenetet, amelyben jelzi, hogy a most pp
a meghvott fggvny belsejnl tart. A 7. sorban aztn a Demonst rat ionFunct ion ( )
vget is r, s a vezrls visszakerl a hvhoz, vagyis esetnkben a main () fggvny-
hez. A vgrehajts a fggvnyhvst kzvetlenl soron, vagyis esetnkben a 16.
sorban folytatdik, ahol a main () kirja az utols zenetet, s maga is vget r.
Fggvnyek hasznlata
Egy fggvny vagy egyetlen adattal lr ViSSZ:l, vagy vissz,nrsi rtke void, ami azt je-
lenti, hogy nem ad vissza semmit a bvnak. Ha pldul runk egy fggvenyt, ami kt
egsz S7.rl1l1Ot tud sszeadni, akkor <lZ sszeget nyilvn clszen." a visszatrsi rtkben
elhelyezni. Ilyenkur teht a fggvnynk egsz (inI) tpusO visszatrsi ltkkel rendel-
kezik. Ha ugyanakkor van egy olyan fggvnynk, ami csupn egy zenete r ki , de
amgy nem csin:'t1 semmi emltsre melLl, akkor nyilvn nincs mit visszaadni a hv
flnek. A fggveny visszatrsi rtke teht ilyen esetben clszcn.len void.
A fiiggvnyek mindig egy fejlcbl (4. sor) es egy trzsbl (5-7 sarok) llnak. A fejlc
tartalmazza a viss7.atrsi rtk tpust, a fggvny nevl, valamint a param-
terek (ha vannak) listjt. A pammterek adhatunk :1t egy fgg-
vnynek kllle rtkeket, amelyekkel a mUkdst vezrelhetjk. Visszat/Ve
az immi , egyszeru sszeadst fggvnynkhz nyilvn clszenl ennek pamm-
terknt tadni a kt sszeadaoclt. Egy ilyen fggvny fejlce teht a
nzhet ki:
int Sum (int a, int b)
TiSZlzand az a fggvnyparamter megadha cSllp:'in egy deklarci,
amelyben azt rjuk e16, hogy milyen tpus adatot kell a hv flnek :'itadnia. A fgg-
vny hv{\sakor tnylegesen tadott rtk neve argumentum. Ezt a kt fogalmat szmos
progmmoz6 szinonimaknt hasznlja, mg msok knosan gyelnek a elnevez-
sekre. Mi ebben a knyvben az - ktsgkvl knnyebb - megoldst fogjuk v-
lasztani, vagyis hol par.lmlelt, hogy argumentumot runk m<ljd.
A fggvny nevt s paramtereinek listjt (vagyis a fejlcct a visszatrsi rtk tpU5<1.
nel kl) egyttesen a fggvny szignatrjnak nevezzk. A fggvny trzse egy nyit
kapcsus zrjellcl nulla vagy tbb utastsbl ll s egy zr k .. pc.sus zrjel-
lel vg7.6dik. A fggvny ltal munkt a kt zrjel kzti utastsok jelen-
tik. rtket visszaadni a return utastssal tudunk, amely egyben be is fejezi a fgg-
2. ra C++ rszei 33
fut!;t, akrhol legyen is a k6djban. l-la egy fggvnyben egyltaln nem szere-
pel ez az utasts, akkor automatikusan void lesz a visszatrsi rtke. gyeljnk r,
hogy a return utn valban olyan tpus rtk szerepeljen, mint amilyent a deklarci-
ban visszatrsi tpuskm megadtunk.
Fggvnyparamterek hasmlata
A 2.4 Listban bemutatunk egy fggvnyt, amely kl egsz szmot vesz t
a paramterknt, sszeadja azokal, majd az eredmnnyel - amely szin-
tn egsz rtk - tr vissza a hvhoz.
2.4 Ua .. - Egy bemen6 paramterekkel randalk .. 6 agyazer4l1lggvny llune.eppl
o: nincl ude
1 .
2 : int Add (int x, int y l
3 : {
4 : std :: cout "Itt az Add ( ) fggvny, a kvctkcz6 rtkeket kaptam "
_ x s y ' \n ' ;
5: return (x+y) ;
6 .
7 .
8 : int mai n()
9 : (
10 : s td : :cout "A main() fo.ggv nyben
11 : std :: cout " \nMeghivjuk az hdd() fggvnyt\ n';
12 : st d :: cout "A visszaadott rtk : " Add (3 , 1) ;
13 : std :: cout " \nIsmt a ma in() fggv nyben vagyunk. \n" ;
14 : std : : cout "\nKilpnk ... \n\n" ;
15 : rcturn O;
16 :
monat
A main () fggvny ben vagyunk!
Meghivjuk a z Add() fggvnyt
It t az Add() fggvny , d rtkeket kaptam 3 s 4
A visszaadott r t k: 7
Ismt a mai n () fgg"vnyben vagyunk.
Kilpnk . .
Az Add () fggvny meghatrozsa a 2. sorban Lthat, hogy kt cgsL': rt-
ket vr paramterknt, majd egyetJen, szintn egsz rtkkel tr vissza. Maga
a program a 10. sorban ahol kir egy tjkoztat zenetet.
34 11. rsz Bevezets a C+ + programozsi nyelvbe
A 12. sorban a mai n () egy zenet ksretben kirja az Add () fggvny ltal vissza-
adott rtket. Ez az rtk az Add (3 , 4 J hvs hatsra keletkezett, ami szintn a 12. sor-
ban lthat. A vgrehajts a pontrl gazik el gy, hogya hvs utn vgrehajtott
a 2. sorban lthat. A fggvnyen bell a neki tadott kt rtket az x s
y vltozk reprezentljk. A kd ezeket sszeadja, majd az eredmnyt az S. sorban
visszaadja a hv flnek.
Ez az a visszatrsi rtk (7), ami a ] 2. sor hatsra a is megjelenik.
A mai n () ezutn a s 14. sorokban kir egy-egy zenetet, majd maga is kilp,
visszaadva ezzel a vezrlst az opercis rendszernek.
Krdsek s vlaszok
Krds: Mi a szerepe az #include utastisllak?
Vlasz: El. egy az (preprocessor) sz[ direktva. Az el6feldolgoz
egy olyan program, .l mi! a fordt hv meg automatikusan minden egyes fordtsi meg-
kezdsekor. Ennek a mkdsr lehel vezrelni ezckkel a direktvkkal. Konkrtan
az Itinclude aZl jelcnti , hogy az e[6feldolgoznak be kell sz(unia az adott helyre
az #include lll, n megadotl fjl lcljes ugyanllgy, mintha azt mi magunk g-
pdtk volna be oda.
Krds: Mi az klllbsg a II s a 1* lpllSI meg;egyzseM Mz6tt?
Vlasz: A keu6s perjellel indtott megjegyzs a sor vgn automatikusan vget r.
A perjel s csillag kombimdval jelzett ezzel szemben a zr p{lfig, vagyis az els()-;
tart. Ne felejtsk el, hogy az ilyen tpus megjegyzsnek "mag{ltl" so-
ha nincs vge, az mg a fggvnyeket lezr kapcsos zr6jelen is {ltnylhal. Minden-
kppen ki kell rnunk teht a zr -; kombinci6t, klnben fordtsi hibt kapunk.
Krds: Mi klnbzlel Illeg egy j es egy rossz megjegyzst?
Vlasz: Egy j megjegyzs azt mondja el a kd olvasjnak, hogy mirt pont az tn-
nik az adott helyen, anti, vagy ltalnosabb esetben informcit s7.o1gltat arrl , hogy
az adott kdblokKnak mi a clja, mi az a feladat, amit meg akalUnk vele oldani. Rossz
megjegyzs pldul az, amelyik azt prblja megmagyarzni, hogya k6d eb')' adott so-
m mit csinl. A k6dsorokat gy kell megrni, hogy azok magukrt beszljenek, s
a megrtskhz ne kel!jen semmil yen tovbbi magyarzat. Az igazsg az, hogya for-
rskdok dokumentlsa amolyan nll tevkenysg, amit maghoz
a nyelvhez hasonlan tanulni kell.
2. ra Egy C++ program rszei 135
Gyakortatok
Most, hogy mr tudunk ezt-azt a C++ lljon itt nhny megvlaszoland kr-
ds s megoldand feladat, amelyekkel megszil rdthatjuk a fordtprogrammal kap-
csolatos eddigi tudsunkat.
Kvfz
l. Milyen tpus a main () fggvny visszatrsi rtke?
2. Mire valk a bpcsos z rjelek'
3. Mi a klnbsg a fordtprogram (compiler) s a (interpreter)
kztt?
4. Min olyan fontos il kdok jrahasznostsa?
Gyakorlatok
1. Vegyk H 2.1. Listllban bemutatott kdot, s bontsuk kett a 4. sorllban hthat
gy, hogy az egyik sorban a Hell a msikban a Vilg sZt rassuk ki.
Trtnt valami vltozs a kimenet form<tum(lbHn? Hogyan oldhat juk meg, hogy
a kt sz kln sorban jelenjen meg?
2. Prbti ljuk meg lefordtani sajt rendszernkkel a 2.1 Listban lthat kdot de
gy, hogy az include dostream> direktvllt trjuk I/inc1ude
<iostream. h> alakr.L Ezzel kiderthetjk, hogy az ltalunk haszn{ll t fordt-
program elfogadja-e mindt alakot, vagy ha nem, akkor melyikkel hajland
kdni. Ennek ,lZ informcinak mg nagy hasznt vehetjk.
3. Pr6bljunk meg lefordtani egy kdit az integrlt krnyezet (IDE) segt-
sgvel, majd parancssorbl is. Van-e brmi klnbsg a keletkezett binris ll o-
mnyok kltt?
Vlaszok a kvlzkrdsekre
l . A mai n () fggvny mindig egsz (int) rtkkel tr vissza.
2. A kapcsos zrjelek egy programblokk elejt s vgt jellik. Ilyenek kz kell
zrni pldul egy fggvny trzst, de lteznek ms fajta blokkok is.
3. A fordtprogram (compiler) a teljes forrskdot lefordt ja gpi k6dra, eJ-
kezden vgrehajtani azt. A (interpreter) ezze! szemben so-
ronknt halad vgig a kdon, s minden utastst azonnal vgrehaj t.
4. Nos, min hasznlunk fl tbbslr bizonyos e1kpzelseket az let ms terlete-
in, nem csak a programozsban? Azrt, mert ez gy sokbl knnyebb, gyorsabb
s bizonyos helyzetekben olcsbb is, mint jra s jra megrni ugyanazt a kdot,
vagy megcsinlni ugyanazt. Az az igazsg, hogy az informci megosztst s
a helyes gondolkodst is tantani kell.
RA
Vltozk s llandk
.. lisz sz ebben az rban:
.gyan vezethetnk be j vltozkat ill etve ;.lland6k:it.
H adharunk Jtkeket a vltoz6knak t!s hogyan v:llozlitLhatjuk meg.
rhat juk ki egy vltoz rtkt a kpernyre.
a vltoz?
lZ nz6pontjbl a vltoz6 egy Lerl et a szmtgp Jnf;!mrijtlban, flhol
II1II u.rolhawnk, amelyeket visszaolvashalunk.
",: .. ez pontosan mit is jelent, meg kell ismernnk v:damennyi rc