Az operátorok precedenciája ACésaC+ + és asszociativitása kulcsszavai A táblázatban elóbb szereplő operátorok magasabb precedenciával rendelkeznek, mint a ké Kulcsszavak sőbb felbukkanók. A C++ szabályai szerint egy kifejezés legbelső zárójelén belül található műveleteket a program az operátorok precedenciájának sorrendjében végzi el úgy, hogy and' (&&) false' sizeof a legmagasabb rangú operátorral előírt műveletet hajtja végre először, majd csökkenő sor and_e,,' (&,,) float size,t rend szerint folytatja. tv. egyoperandusú plusz (+) és minusz (-) a precedencia-lista maso .,m '0" static dik szintjén szerepelnek. vagyis - teljesen logikusan - megelőzik az aritmetikai megfelelői auto friend' statiC, cast' ket, amelyek az ölödik szinten kaptak helyet. A második szinten található & operátor a "cí bitand' (&) goto struct me" operátor, míg a g, szinten látható ugyanilyen jel a bitenkénti AND művelet operátora, bitor' ( I) " switch A 2, szinten látható" a mutató által cfmzett tartalom kiolvasását végzi, míg a 4. szinten lát· bool' inline' template' ható ugyanilyen jel a szorzás, Amennyiben a műveletek végrehajtásának sorrendjére nem utalnak zárójelek, úgy az azonos precedenciaszinthez tartozó műveleteket a program jobbról break 'ne this' balra. vagy balról jobbra haladva hajtja végre a táblázatban megadottnak megfelelöen, case long throw' Szint Operátorok Kiértékelési sorrend catch' mutable' true' 1 (magas) ( ) :: balról jobbra char namespace try' 2 · [ l -> ++ -- balról jobbra class' new' typedef typeid keyword, typecast campl' (-) not' (l) typeid' 3 * & ! - + ... -- ... - jobbról balra const not,eq' ( I,,) typename' aizeof new delete const, cast' operator' union 4 · * ->* balról jobbra continue or' (I I) unsigned 5 ,• -/% balról jobbra default or, eq' (I,,) us!ng' 6 balról jobbra delete' private' virtual' ) « » balról jobbra do protected' void 8 < <= > >= balról jobbra double public' volatUe' 9 ='" I", balról jobbra • dynarnic, caet' register wchar, t 10 balról jobbra 11 • balról jobbra else reinter- while 12 balról jobbra on= pret, cast' xor' (A) •• 13 balról jobbra explidt' return xor,eq' (A;;) 14 " balról jobbra export' short 15 ? , jobbról balra extern eigned 16 = *= /= ... = -= %= jobbról balra «=»;&=A=I= , Csak a C++ nyelvnek része, 17 throw balról jobbra Azok a kulcsszavak, amelyek után zárójel szerepel, 18 (alacsony) , (vessző operator) balról iobbra a zárójelben található operátor szinonimái. Adattípusok a C+ + nyelvben TIpus 16 bit 32 bit Tartománv uneigned short int 2 bájtos 2 bájtos O-tól 65 535-ig short int 2 bájtos 2 bájtos -32 768-t6l32 767-ig uneiqned long int 4 bájtos 4 bájtos O-tól 4294967 295-ig long int 4 bájtos 4 bájtos -2147483 648-t612147 483647-ig int 2 bájtoe 4 bájtos (16) :-32768-tóI32767-ig; (32) :-2147483 648-tól 2147483 647-ig unsigned int 2 bájtoe 4 bájtos (16) :O-tó165 535-ig; (32) : Q-tól 4 294 967295-ig size_t 2 bájtoe 4 bájtos (16) :0-tó165 535-ig; (32) : Q-tól 4 294 967295-ig char 1 bájtoe l bájtos 256 karakter wchar_t 2 bájtoe 2 bájtos 65535 karakter bool l bájtos 1 bájtos True vagy False float 4 bájtos 4 bájtoe 1,2*10·>1 tó13,4"10" ig double 8 bájtos 8 bájtoe 2, 2 *10-"'-tól 1, 8*10'''-ig long double 10 bájtos 10 bájtos 3, 4 *10·""-t6l l, l *10""-ig TARTALOMJEGYZÉK I. rész Bevezetés a C+ + programozási nyelvbe l. óra Kezdő lépések E!őkészülctck a programozáshoz ....... . · 3 A C++ nyelvjárásai (C++, ANSI C++, ISO C++ és a Windows) .4 A fordító telepítése és beállítása .5 Telepítés a CD-r61 . , ................ . . ..... 6 A Borland C++BuilderX fordító beállítása ...... . · .. 6 Fordít.'Ís a Borland C++BuilderX-szel ..... 8 A fordítóprogram és a szövegszerkesztő ..... 9 Fordítás és linkelés ......... 10 Fordítás az integrált fejlesztői környezetben .10 linkelés (ősszeszerkeszl(:s) .......... ........... 11 A fejlesztési ciklus. , .. . ..... II HELLO.CPP - Az els6 C++ programunk · 13 Fordítási hibák ...... . 15 Kérdések és válaszok 16 Gyakorlatok 16 Kvíz 17 Feladalok 17 Válaszok a kvízkérdésekre . 17 2. óra Egy C++ program részei Mitő! lehet jó választás a C++ nyelv. · . 19 Procedurális, strukturált és objektum-központú programfejlesztés . · 21 A C++ rwelv és az objekmm-központú programozás . 22 Beágyazás (encapsulation) . . . . . . . . . . . . . . . . . . . .. . ......... .. .... 23 Öröklődés és újrahasznosítás .................... . . .... 2.~ Többalakúság (polimorfizmus) .... . .. . . ..• ... .. · . 24 Egy egyszeru program részei .......... . · . 24 Az #indudc utasítás viz.<;gálala .... ... . . . . . . • . . . 25 Elemzés soronként. . ... 26 Megjegyzések ................................ 28 A megjegyzések tipusai ................... .. ... ....•. .. . . ... 28 Megjegyzések használata egy egyszerű programban . 29 I iv Tanuljuk meg a C++ programozási nyelvet 24 óra alatt Függ"ények . . . . . . . . . . . . . . . . . . .. .....•.....•..... 30 Függvénybívások . . .•...•..... . .. .. .•..•..... 31 Függvények használata ....... . ........ ............ . 32 Függvényparaméterek használata . . • . . . • . . . . . . . . . • . . • . • . .. . 33 Kérdések és válaszok . . . . . . . . .. 34 Gyakorlatok . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3S Kviz .. ... 35 Gyakorlatok ... 35 Válaszok a kvrzkérdésekre ... 35 3. óra Változók és állandók Mi az a változó? . . . . . . . • . . . . . • . . . . . . 37 Mem6riafoglalás .. . ... , . . .... .... .. , . . 38 A'L. egt:s'L. számok (Integer) mérete . . • . . . . . . • . . . . . • . . .... 39 signed és unsigned ........ ... . . . . . . . . . . . . . . . . . . . . . 40 Alapvető változ6lípusok .......... . . . . . . . . . . . . . . . . 41 Egy v{lltozó meghatározása . . . . . . . . . . • . . . .... 42 A kis- és nagyl>culk eltér6 jelemésér61 . . . . . . . . . . . . . . . . . . . , 42 Kulcsszavak. . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . . . . . .... 43 Egynél több változó megadása egyszerre .....•............ .. . . .... 44 ÉrtC:kck hozzá rendelése a változókhoz . . . . . . . . . . . . . ....... 44 typedef ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . . . . . . . .... 45 Mikor használjunk short és mikor long típust ... . . . . . • . . . . . ...... ,47 El6jel nélküli egészek túlcsordulása ...............•.....•............ 47 Az el6jeles egészek körbefordulása .......... , ... ........ •.. .•.. ...... 48 Állandók . . . . . . . . . . . . . . . . . . . . . . . . . ...•............ •.. , ........ 49 Uterális állandók ........................ ... . ... •. ... •...•..•.. ... 49 Nevesített (symboJic) állandók .............•. . ..............•..... 50 ÁIland6 bevezetése a #define ku1cssz6val ..... .. , . . . • . . . • . . . . . . 50 Állandó bevezetése a const ku1csszÓval. ...... . .....•......•.....•..... 51 Felsorolt (enumemted) állandók ............ .. , . . . . , , ..•.. ...... 51 Kérdések és válaszok ................... .................. 52 Gyakorlatok .. ... .... ........... . 53 Kvíz .... ... 53 Feladatok . ...... . .. ... .. .. . 53 Válaszok a kví'L.kérdésekre .. .... ...... 54 4. óra Kifejezések és utasftások Utasítások .55 Üres helyek .. .. 56 Összetett utasítások .. 56 Kifejezések .. 57 Tanuljuk meg a C++ programozási nyelvet 24 óra alatt v Operátorok ..................... . . .. 58 Értékadó operátor ............... . . .... 58 Matematikai operátorok ................................. 59 Matematikai és értékadó operátorok kombinálása . . . . . .. . .. 60 Növelés és csökkentés. . . 60 Előtag (prefix) és utótag (pOStfL'0 operátorok .............. . .... 61 Precedencia, avagy a műveletek végrehajtási sorrendje ........ 63 Egymásba ágyazott zárójelek összetett kifejezésekben. . ....... 64 Relációs operátorok ........ 65 Az if utasítás . . . . . 66 M_~ ~ Összetettebb if konstrukciók ....... . . 68 Kapcsos zár6jelek használata egymásba ágyazott if utasítások esetén .. 70 A logikai operátorokr61 bővebben . . . . . . . . . . . . . ................. 73 Logikai ÉS .. . . 73 Logikai VAGY. . . . . . . . . . . . ........ 74 Logikai NEM. . . . . . . .. .. .. .. . . . 74 Relációk precedenciiija .... 74 Bővebben az igazság természetéren . . . . . . . . • . . • . . . . . . 75 Kérdések 6s v<Ílaszok ....... . . . . . . . . . . . . . . . . . . . . . . .. 76 . Gyakorlatok . . . . . . . . . . . . . .. . ... 76 Kvíz .. . ......... 76 ........ . ........... n _~~ Válaszok a kvízkérdésekre . . ...... 77 5. óra Függvények Mi is az a függvény? ................... .. .. . ... . . 79 A függvények deklarálása és definiálása .81 Függvények deklarálása . .81 Függvények definiálása ... .. . . 83 Függvények megadása: összegzés .. ... . .... .... ..84 Változók használaca függvényeken belül ........... . ........ 85 Helyi változók ............... . . .... ... ...... 86 Globális változók ............... ... ...... .. . ..88 A függvények argumenrumai ....... .. . . ..89 Függvényhívás mim paraméter ....... . .... . .... . ..89 A paraméterek egyben helyi változók is ..... ... . . . . ... . . 90 Értékek visszaadása függvényből ... ........ .. . . . ... 92 r-üggvények alapértelmezett paraméterei ................ . .. 95 Függvények túlterhelése .. . ...........• . . ....... 97 Inline függvények .. .. . ......... . . ......... 98 A függvények és a verem . . . . . • . . ....•. . . ... 101 Kérdések és válaszok .......... . .. . .... . . . .... ......... 103 I vi Tanuljuk meg a C++ programozási nyelvet 24 óra alatt Gyakorlatok ........ . . 104 Kvíz ... · ...... 104 Feladatok . 105 Válaszok a kví:t.k~rdésekre ... .... . . 105 6. óra Vezérlési szerkezetek Ciklusszervezés ..... . . .... ..... 107 A ciklusok 6se: :I goto utasítás .••...• ..... 107 Miért ne használjuk :I goto utasítást? ...... ... . . ... ........ 108 A while ciklus ....... . ............. .• · ....... 108 llonyolulcabb while UUlsítások ........ . · ........ 109 A <.:ontinue és a break ......... ....... .. . . .. 111 while(1) - végtelen óklusok .. 113 A do ...w hile ciklus .......... . · . 114 A for ciklus .. . ......... . · . 117 lnidalizád6, vizsgálat, léptetés. · •...... 117 Összeteuebb for ciklllsok ............ . · ....... 119 Halmozott inidaliz:ídó és léptetés .. . · ....... 119 Üres UUlsítások a for ciklusfejben .. . . ..... •...... 120 Üres for ciklus .... ...... ......... . . . ... .. .. ..... 122 Egymásba ágyazott ciklusok · ........ 123 A switch utasítás ....... . . • . . . . . . . . . 124 Kérdések és válaszok .... . · . 126 Gyakorlatok ......... . . .... 127 Kvíz .. · ........ "127 Fehldalok ................. . ..• ..... .. 127 Válaszok a kvízkérdésckre ... . . ...... 128 II. rész Osztályok 7. óra osztálvok Alapvető Mi a típus? . . . .......... . . · ...... 13] Új típus létrehozás,l · .. ..... 132 Osztályok és tagok ..... . . . ... ... ... ... 132 Osztályok deklarálása ............... 133 Osztályok nevezékIana .. · ...... 134 Objekrum definiálása . .... ...... ..134 Osztályok és objektumok ...... 13; Osztályok Ulgjainak elérése: ......... 135 , Privát és publikus hozzáférb .... ..... ....... 136 Osztálymetódusok létreho~ .. ... 138 Konstruktorok és clestru!-.'.l( :; ~ ~.lIZ _- .... létrehozása és türlése .. 140 I Tanuljuk meg a C+ + programozási nyelvet 24 6ra alatt vii Alapértelmezett konstruktorok ............... . ... . · .... 141 A fordító áJtal biztosított konstruktor .... ... ... .. . ... •. .. . · .... 141 Kérdések és válaszok . ... 144 Gyakorlatok. · . 144 Kvíz . ........ 144 Feladatok · .... 145 Válaszok a kvízkérdésekre ............. . · . 145 8. óra Az osztályokról - mélyebben Konst.1ns tagfüggvények ........... . . ......................... .. 147 Felület és megval6sítás ............ . ...................••. .. . .. J48 Hová tegyük az osztály-deklarációt és a metódus-def'iníciókat? ......•...... 149 Helyben kifejtett (jnline) megval6sítás ... .... . ............ •.... , .. 150 Osztályok beillesztése más osztályadattagjaiként ...... .. ..... 152 Kérdések és válaszok ......... ......... . .. .. ... •....... "157 Gyakorlatok. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Kvíz . . . • . . • . . .. ..• ... .. .•.•.. ..... 158 Feladatok . . . . . . . . .. . .................. 158 Válaszok a kvizkérdésekre ...... . .. ....... .... •.••.. •... .. .... 159 III. rész Memóriakezelés 9. óra Mutatók A mutatók és használatuk megértése ........ .... .•. ..•.•. ..•. · .... 163 A memóriadm tárolása a mutatókban ..167 Mutatónevek .......................................... . · ... . 1<>9 A közvetett elérés operátor, avagy mutatók közvetett használata ... · .. 1<>9 Mutatók, címek és változók. . . . . . . . . . . . . . . .... .. . · .. 170 Adatok manipulálása a mutatók használatával ............ . .170 A mutatókban tárolt címek vizsgálata .. .. . .• ...•. .172 Miért jó mutatókat használni? .................. .. . . · .. 174 A verem (stack) és a dinamikus memória (heap) .......... . .. . . ... 175 A new kulcsszó használata · .. 176 A delete kulcsszó használata .. .177 Amemóriaszivárgás elkerOlése . . .. ..•. •.. .•. . .. .. . . .. .. . . .. 179 Kérdések és válaszok ............•. . . .. .......•. ... .•.. .... 180 Gyakorlatok. . ............ ... •. •. ..•.• ... .. ... .. ..•. ..... 181 Kvíz · . 181 Feladatok .. •... •.. ...• ..... .... •... .•• ..... 181 Válaszok a kvízkérdésekre · .... 182 I vi Tanufjuk meg a C++ progral'TJOlási nyeMrt 24 óra alatt 10. óra A mutatók kifinomult használata Objekrumok létrehozása a memóriában .......... ........... ... IM Objektumok törlése . ... ...... ..... .... .... ...... 184 o o ••••••• Adattagok elérése mutatókon keresztül 185 ••••• o o • o o o o • o o • o •• o • o o • o •• o Adauagok a dinamikus memóriában ...... ................. 186 A this mutató . 188 o • o o o • o • o •••••• •• o o o o o. o o ••• o o. 0 ••• Gazdátlan vagy ~16g6~ mutatók ........ . . ...... .. ... .. ...... 190 Konswns mutatók 191 •••••••• o o •••• o. o 0'0 o. o. o,. o o ••• o Konstans mut:ltók és konstans tagfüggvények. 191 o • o ., o o , •• , o o , • •• o o o o o Konstans this mutatók ......... 93 o • • o • o o • o o o o • o , Kérdések és válaszok ........ 193 o •• o • • • • • •• • o • Gyakorlatok. . ................ • 194 o •• o • o o • Kvíz 194 o o • o o o o •• o • o •• • o • • • • • • o • • • • • P<:!ladalok 194 o o o • • o • o o • o • • • o o • Válaszok ti kvízkérdésekre o o • • o • • • •• o • o • • •••• 194 11. óra Hivatkozások Mi :IZ a hiv:ll.koWs (referencia)? ... 195 o •• o • o •••• o •• o •• ••• ••• ••• •••••• Hivatkozások létrehozása .......... 196 o • o o • o •••• o •• o •• o • • • • • • ••• A wdme~ operátor alkalma7.ása hivatkozásokra 197 o. o • o •• o o •••• o o • • • • o • o ••• A swap() javítása mutatók segítségével 203 o •• o o • o •• o • o •• o o ••• o o • • • A SW:lp() ójabb megvalósílása hivatkozásokkal 204 o •••• • •• o •••• o • • • • • • • •• • Kvíz ...... 210 o • o •• o • o o • o o • o •• o • o ••• Feladatok . . . .. 210 o • o ••• o • o •• o • o o •••• o • o o • • ••• • • o • o • o Válaszok a kvízkérdésekre 211 o •• o • o •• o ••••• o • o • o o •• o • o •• o • o o • o o • o • o 12. óra A hivatkozásokról és mutatókról - mélyebben Hmékonyabb a cím szerinti paraméterátadás .. 213 o • o o • o. o o • o o • o o o o • Mutassunk konstansr.i ........ 217 o • o o • o • • o • o o ••• Hivatkozások, mint a mutatók kényelmes alternatívái. . ...... 219 Mikor használjunk hivalkozásokat, és mikor mutatókat? .. 221 Ne adjunk vissza mcgszCínt objektutnr3 mulatÓ hivatkozást! ............... 222 A dinamikus mcm6rialerületen létrehozott objekUlmra mutató hivatkozás visszaadása 223 ••••••••••••• o • o o • o •• o • o o • o o Mutató, mutató, kié a mulató? . ............... 226 o o • o ••••••••••••••• Kérdések és válaszok .. 227 o •• o • o o o o Gyakorlatok .. 0227 o • Kvíz 0227 o o o o o o o o o o o o o o o o o o o Fcladatok 0228 o o o o Válaszok a kvízkérdésekre 0228 o o Tanuljuk meg a C++ programozási nyelvet 24 óra alatt ix IV. rész Haladó eszközök 13. óra A függvények kifinomultabb használata Túlterhelt tagfüggvények. · .. . 231 Alapértelmezett értékek használata · ... 234 Hogyan válasszunk a túlterhelés és az alapértelmezett értékek h:lsználata között? .... 236 Konstruktorok túlterhelése ..... 236 Objektumok inicializálása .. 237 A másoló konstruktor .. . ... ..•.... . .. 237 Kérdések és válaszok ..... . ..... 242 Gyakorlatok. · .. 243 Kvíz · 243 FeJadalok .243 Válaszok a kvízkérdbckre .. ... .. .. .. .. .. . ..•..... 243 14. óra Operátorok túlterhelése Hogyan terhelhetünk túl operulorokat . · . 245 Írjuk meg az inkremenuíl6 függvényt ...... ... . 247 A postfix (Ul6tag) inkremenu:iló operihor túllerhelése 248 A prefix és a postl1x közöui különbség ......... ..... 248 operator+ ...... . . 251 Az operator+ túherhelése . . .. 252 Az operátortúlterhelés korlátai · ... 254 Mit célszerti túlterhelni? .254 operator" .254 Konverziós operátorok .258 Az intO opcdtor .. .260 Kérdések és válaszok · . 261 Gyakorlatok . · .. . 262 Kvíz ... . .... . 262 Feladalok . ....... .. 262 Válaszok a kvízkérdésekre . . . .. 263 15. óra Tömbök Mi az a tömb? .... . .... .. .. •. .. . ....... 265 A tömbök elemei . . .. ... 266 Tömbök túlírása . .. 268 Kerítésoszlop hibák . 268 Tömbök előkészítése. 269 ObjekUllntömbök ........... . . . ... .. •..... .... 270 Többdimenziós tömbök ...... . .. . . .. ... . ...... 272 I x Tanuljuk meg a C+ + programozási nyelvet 24 óra alatt Többdimenziós tömbök inidalizálásll .273 Néhány szó II memórial1asználalr61 ........... . .. ... 275 Mutatótömbök . . .......... .. ... . ........ 276 Dinamikus memóriában tárolt tömbök deklarálása .... 278 Tömb mutatója és mutatók tömbje ...... . .. .... 278 Mutatók és tömbnevek .............. . .. .. .. .... 279 Dinamikus memóriában létrehozon tömbök törlése .. 281 Karaktertömbök ..... . •.•• •.• •.• •..... 282 Az strcpyO és az strncpyO függvények .......... . . 284 Karakterlánc-osztályok ... . .. .. ... ..... 286 Kérdések és válaszok ... . .. ..... 287 Gyakorlatok. .. 287 Kvíz ....... .... . ....... 287 Feladatok .. •.. .•. ..288 Válaszok a kvizkérdésekrc ........... . ............. .. ..... 21J8 V. rész Öröklődés és többalakúság 16. óra Az öröklődés Mi az az öröklődés? . . . . .. .................... •..... . ......... 291 Öröklődés és származtatás ....... . .........•. .•.. ... . ...... 292 Modellezzük az öröklődést az Állatok Országával. . . . . . . • . . . . . • . . . ... 293 A .';zármaztatás szintaxisa . . . . . . . . . . . . . . . . . . . . . . 294 Privát vagy védett? . . . . . . . . . . ... . ......... 296 Konstnlktorok és destruktorok ...... .. .. .•.. ...• ... . ...... 298 Paraméterek átadása a báziskonstruktornak .......... . ..... 300 Függvények felülbírálata . . . . . . . . . . . . . . . ... . ..• .. ... •...•...... 305 Túlterhelés vagy felülírás? ........ . . . . . . . . . . . . . . . .... 307 A bázisosztály metódllsaimlk elfedése . . . • . . . • . . . . . . . . • . . . • . . . 307 A bázismetódlIs meghívása .... . . . . • . . . . . • . . . . . . . 309 Kérdések és válaszok . . . • . . . • . . . . . . . . . ..... 311 Gyakorlatok. . . . . . . . . . . . . . . . . . . . . . • . . . . . . 311 Kvíz... ... .. .... ... .. .... .. .. . ... .. 311 Feladatok ...... ....... 311 Válaszok a kvízkérdésekre .............................. 312 17. óra A többalakúság és a származtatott osztályok A vinuális függvényekkel megval6síton többalakúság ...... . ......... 313 Hogyan működnek II virmális függvények ............ . • . . . . . • . . . 318 Nem juthaL,>z innen amoda. . . . . . . . . ....... 319 Szeletelés (slicing) . . . . . . . . . . . . .. ... ........ 320 Virtuális destruktorok .. . . . . . • . . 322