
Nyisztor Károly
Gyakorlati C++
Rejtett lehetoségek, különleges megoldások
ISBN: 963 09 4645 9164 x 234 mm
A könyvhöz már nem egyszerű hozzájutni, de némi szerencsével, webboltokban vagy antikváriumokban még fellelhető.
400 oldal 3990 Ft
Megjelent: 2004 október 3.
www.interbook.hu
www.corvina.hu
konyvesbolt.hwsw.hu
www.kiskapu.hu
A könyv példaprogramjai letölthetők innen
Könyvünk a C++ nyelv alapjait és működésének elvontabb, finomabb aspektusait egyaránt feldolgozza - az előfeldolgozástól a kivételkezelés-ig. Olyan gyakorlati problémákra kapunk választ, mint például az állományok befordításakor fellépő végtelen rekurzió, a számok gépi ábrázolása és az ebből eredő alul-, illetve felülcsordulási gondok, valamint a véges pontosság jelentése.
Konkrét megoldásokkal találkozhatunk a lebegőpontos számok bináris ábrázolására, egy dinamikus tömbosztály megvalósítására. Fény derül a nyelv egyik alapeleme, a pointerek belső működésére és a velük kapcsolatos veszélyekre. Betekintést nyerhetünk a függvényhívások rejtelmeibe, világossá válnak a rekurzív függvényhívásokban rejlő kockázatok, nyilvánvalóvá az okok.
A könyv külön figyelmet fordít az objektumorientáltsággal felmerülő fogalmak tisztázására, az osztályok, struktúrák, virtuális függvények helyes használatára és optimális kiaknázására. Fontosságának megfelelo helyet kap a kivételkezelés. Természetesen nem maradhat el a nyelv legújabb vívmánya, az STL - a konténerek, iterátorok és algoritmusok - bemutatása sem.
Előzmények
A könyv írásának mozgatórúgója az volt, hogy annak idején elég nehéz volt az általam kedvelt Assemblyről átnyergelni egy olyan magas szintű nyelvre, mint a C illetve C++.
Az objektum-orientáltságról is megvolt a véleményem - úgy gondoltam, hogy feleslegesen növeli a kódot és csökkenti a teljesítményt a sok objektum, rejtett adattag, virtuális függvénytábla meg futásidejű típusinformáció.
Később aztán rá kellett jönnöm, hogy egyrészt az Assembly tudásomra már nem nagyon van kereslet, másrészt bizony nehézkessé teszi a méretesebb project-ek fejlesztését illetve karbantartását a régi, jó stuktúrált programozási szemlélet - úgyhogy megismertem, majd fokozatosan megszerettem a C++-t .
Többen kérdezték, miért is kezdtem hozzá egy C++ könyv írásához, azzal érvelve, hogy már van elég ilyen könyv, és gyakorlatilag már nem lehet újat írni a C++-ról. Természetesen tudtam, hogy egyrészt az irigység beszél belőlük ;)
Egy olyan összetett programozási nyelvről, mint a C++, mindig lehet újat írni. Ezt alátámasztja az a tény is, hogy ezt folyamatosan meg is teszik...
A nyelv szabványosítása megtörtént, de ettől függetlenül várhatóan tovább fejlődik. Legutóbb az STL vált a nyelv szerves részévé, és ki tudja, mi jön még. Azonkívül a nyelv komplexitásából adódóan újabb és újabb problémák, kérdések merülnek fel, és a "főguruk" javaslatai alapján megpróbálják a dolgokat - a szabványban - egyértelművé tenni. Könyvemben elkalandozok ilyen érdekes területekre is, és szemléltetésként konkrét példákat mutatok be.
Remélem, hogy könyvemmel hozzájárulok ahhoz, hogy Ti is megszeressétek ezt a nagyszerű programozási nyelvet.
Ma (2004.okt.1) kaptam meg a szerzői tiszteletpéldányokat. Mivel a könyv pár napja még a nyomdában volt, jellegzetes "új könyv" szaga van.
A Kossuth szerkesztői, tördelői nagyon igényes munkát végeztek, és a szekszárdi nyomda is kitett magáért. A könyv elég vaskos, ami a 400 oldalnak, továbbá a jó minőségű, hófehér, megfelelő vastagságú papírnak is köszönhető. Kifejezetten örülök annak, hogy fóliázva kerül forgalomba.
Az alábbi tartalomjegyzékből képet alkothattok arról, milyen témákkal foglalkozom a könyvben.
1 BEVEZETÉS 11
1.1 A C++ NYELVRőL 11
1.2 A KÖNYVRőL 12
2 AZ OBJEKTUM-ORIENTÁLTSÁG MEGVALÓSÍTÁSA C++-BAN 13
2.1 ADATREJTÉS - MÁS NÉVEN EGYSÉGBEZÁRÁS VAGY BETOKOZÓDÁS 13
2.2 ÖRÖKLőDÉS - FUNKCIONALITÁS ÉS KÓD ÚJRAFELHASZNÁLÁS 14
2.3 TÖBBALAKÚSÁG - AVAGY POLIMORFIZMUS 14
3 A C++ FEJLESZTőI KÖRNYEZETE 15
3.1 SZÖVEGSZERKESZTő 15
3.1.1 Automatikus kódigazítás 15
3.1.2 Adat- és függvénytagok listázása 15
3.1.3 Gyors információ 16
3.1.4 Keresés, csere 16
3.1.5 Professzionális keresés
reguláris kifejezések segítségével 16
3.1.6 A regex operátorok részletes ismertetése 17
3.2 A PREPROCESSZOR AVAGY ELőFELDOLGOZÓ 18
3.3 A FORDÍTÓ (COMPILER) 21
3.4 AZ ASSEMBLER 21
3.5 LINKER 21
3.6 A MAKEFILE 21
3.7 VERZIÓKÖVETÉS (VERSION CONTROL) 22
4 A PREPROCESSZOR DIREKTÍVÁK RÉSZLETES ISMERTETÉSE 25
4.1 A # ÉS ## PREPROCESSZOR OPERÁTOROK 25
4.2 A #DEFINE ÉS AZ #UNDEF DIREKTÍVA. #DEFINE KONSTANSOK.
FÜGGVÉNY TÍPUSÚ MAKRÓK 26
4.3 A MAKRÓ-FÜGGVÉNYEK ELőNYEI ÉS HATRÁNYAI 29
4.4 AZ #INCLUDE DIREKTÍVA. ÁLLOMÁNYOK BEOLVASÁSA ÉS LEFORDÍTÁSA 31
4.5 HIBAGENERÁLÁS: AZ #ERROR DIREKTÍVA 33
4.6 FELTÉTELES FORDÍTÁSI DIREKTÍVÁK: #IF, #IFDEF, #IFNDEF,
#ELSE, #ELIF, #ENDIF 33
4.7 EGY GYAKORLATI PÉLDA A FORRÁSÁLLOMÁNYOK BEFORDÍTÁSAKOR FELLÉPő
VÉGTELEN REKURZIÓ MEGELőZÉSÉRE (KÖLCSÖNÖS #INCLUDE) 35
4.8 ELőRE DEFINIÁLT (PREDEFINIT) MAKRÓNEVEK 37
4.9 A #LINE DIREKTÍVA 37
4.10 MEGJEGYZÉSEK (COMMENT) 38
4.11 #PRAGMA 40
4.11.1 GCC #pragma 40
4.11.2 Visual C++ #pragma 41
5 VÁLTOZÓK ÉS KONSTANSOK 43
5.1 A C++ BEÉPÍTETT ADATTÍPUSAI 43
5.2 PÉLDAPROGRAM: ALTERNATÍVA A TÍPUSOK MÉRETÉNEK KIÍRATÁSÁRA -
A SIZEOF OPERÁTOR 47
5.3 VÁLTOZÓK ÉS KONSTANSOK DEKLARÁLÁSA ÉS INICIALIZÁLÁSA 50
5.4 GLOBÁLIS ÉS LOKÁLIS VÁLTOZÓK. ÉRVÉNYESSÉGI TARTOMÁNY (SCOPE) 52
5.5 MÓDOSÍTHATÓ EGY KONSTANS? 55
5.6 SAJÁT TÍPUS DEFINIÁLÁSA 58
5.6.1 A typedef kulcsszó 58
5.6.2 Az enum típus 59
5.7 EGÉSZ SZÁMOK BINÁRIS FORMÁBAN 63
5.7.1 Negatív egész számok ábrázolása 64
5.7.2 Lebegőpontos számok ábrázolása. Véges pontosság 65
5.8 PÉLDAPROGRAM: DECIMÁLIS EGÉSZ ÉS LEBEGőPONTOS SZÁMOK
BINÁRIS ÁBRÁZOLÁSA 70
5.9 FELÜLCSORDULÁS ÉS ALULCSORDULÁS 80
5.10 TÍPUSKONVERZIÓK - A CAST ÉS VESZÉLYEI 83
5.11 OPTIMALIZÁLT ELÉRÉS - A REGISTER KULCSSZÓ 85
5.12 STATIKUS VÁLTOZÓK DEKLARÁLÁSA - A STATIC KULCSSZÓ 88
5.13 KÜLSő VÁLTOZÓK - AZ EXTERN KULCSSZÓ 89
5.14 A VOLATILE KULCSSZÓ 91
5.15 AZ AUTO KULCSSZÓ 92
6 NÉVTEREK 93
6.1 NÉVÜTKÖZÉSEK ELKERÜLÉSE, A GLOBÁLIS NÉVTÉR FELOSZTÁSA 93
6.2 AZ STD NÉVTÉR ÉS AZ ANSI C++ ÚJ FEJÁLLOMÁNYAI 98
7 MŰVELETEK, OPERÁTOROK 101
7.1 ARITMETIKAI MŰVELETEK 101
7.2 RELÁCIÓS ÉS LOGIKAI MŰVELETEK 105
7.3 BITSZINTŰ MŰVELETEK 107
7.4 A & ÉS A * OPERÁTOR 113
7.5 ÉRTÉKADÁS OPERÁTOR 113
7.6 A ? OPERÁTOR 114
7.7 TAGOPERÁTOROK: . ÉS -> 115
7.8 TAGRA HIVATKOZÓ OPERÁTOROK: .* ÉS ->* 115
7.9 A :: HATÁSKÖR-FELBONTÓ OPERÁTOR 117
7.10 I/O OPERÁTOROK: 117
7.11 A VESSZő OPERÁTOR 118
7.12 TÍPUSOK ÉS OBJEKTUMOK MÉRETÉNEK MEGHATÁROZÁSA -
A SIZEOF OPERÁTOR 118
7.13 TÍPUSKONVERZIÓS OPERÁTOROK 119
7.14 A NEW ÉS A DELETE OPERÁTOR 120
7.15 A TYPEID OPERÁTOR 120
7.16 OPERÁTOROK TÚLTERHELÉSE 120
7.17 OPERÁTOROK KIÉRTÉKELÉSI SORRENDJE 123
7.18 EXPLICIT OPERÁTOROK 124
8 ALAPVETő VEZÉRLÉSI STRUKTÚRÁK 125
8.1 ELÁGAZÁSOK 125
8.1.1 Az if és az else 125
8.1.2 A switch kulcsszó 127
8.2 CIKLUSOK PROGRAMOZÁSA 129
8.2.1 A while ciklus 129
8.2.2 A do - while ciklus 131
8.2.3 A for ciklus 131
8.3 UGRÓ UTASÍTÁSOK 133
8.3.1 A break és a continue 134
8.3.2 A goto 136
8.3.3 A return 137
8.4 CIKLUS BELSEJÉBEN DEKLARÁLT OBJEKTUMOK 138
9 A C++ MEMÓRIA KEZELÉSE 140
9.1 MEMÓRIA-KEZELÉS - STATIKUS-, VEREM- ÉS HEAP-MEMÓRIA 140
9.2 POINTEREK ÉS REFERENCIÁK 141
9.3 KONSTANS ÉS KONSTANSRA MUTATÓ POINTEREK POINTEREK
DEKLARÁLÁSÁNÁL FELMERÜLő KÉRDÉSEK 146
9.4 TÖMBÖK 147
9.5 DINAMIKUS TÖMB -GYAKORLATI MEGVALÓSÍTÁS 150
9.6 FÜGGVÉNYEKRE MUTATÓ POINTEREK. FÜGGVÉNY-POINTER TÖMBÖK.
CALLBACK FÜGGVÉNYEK 154
9.7 A NEW ÉS A DELETE OPERÁTOR. ELTOLÁSOS ÉS TÖMBÖS VÁLTOZATOK 159
9.8 A MEGFELELő NEW / DELETE PÁROS 164
9.9 NEW ÉS NOTHROW NEW 166
9.10 MUTATÓK ELLENőRZÉSE 168
9.11 VESZÉLYES TÍPUSKONVERZIÓK 170
9.12 NEW ÉS DELETE FELÜLDEFINIÁLÁSA, TÚLTERHELÉSE 173
9.13 MEGBÍZHATÓ POINTER TÁROLÓK. AZ AUTO_PTR OSZTÁLY 177
9.14 PÉLDAPROGRAM: EGY BIZTONSÁGOS MÓDSZER
SZIGORÚAN ELLENőRZÖTT POINTEREK 181
10 FÜGGVÉNYEK 186
10.1 DEKLARÁCIÓ ÉS DEFINÍCIÓ 186
10.2 A MAIN FÜGGVÉNY 188
10.3 FÜGGVÉNYVÁLTOZÓK 189
10.4 STATIKUS FÜGGVÉNYEK 192
10.5 CONST FÜGGVÉNYEK. A MUTABLE KULCSSZÓ 193
10.6 FÜGGVÉNYPARAMÉTEREK: ÉRTÉK SZERINTI ÁTADÁS,
MUTATÓK ÉS REFERENCIÁK. KONSTANS PARAMÉTEREK.
FÜGGVÉNYEK VISSZATÉRÉSI ÉRTÉKEI 196
10.7 FÜGGVÉNYNÉV TÚLTERHELÉS 203
10.8 INLINE FÜGGVÉNYEK - ÉS A VELÜK KAPCSOLATOS TÉVESZMÉK 204
10.9 A FÜGGVÉNYHÍVÁS. FÜGGVÉNYHÍVÁSI KONVENCIÓK -
MI TÖRTÉNIK A SZÍNFALAK MÖGÖTT 205
10.10 VÁLTOZÓ PARAMÉTERSZÁMÚ FÜGGVÉNYEK 207
10.11 REKURZÍV FÜGGVÉNYEK. A VEREMTÚLCSORDULÁS 212
10.12 ASSEMBLY A C++-BAN 214
10.13 SABLON (TEMPLATE) FÜGGVÉNYEK 217
10.14 FÜGGVÉNY-KÖNYVTÁRAK LÉTREHOZÁSA 219
11 EGYSÉGBEZÁRÁS, ÖRÖKLőDÉS, TÖBBALAKÚSÁG 220
11.1 OSZTÁLYOK 220
11.2 STRUKTÚRÁK 222
11.3 UNIONOK 223
11.4 ELÉRHETőSÉG SPECIFIKÁTOROK ÉS SZEREPÜK:
PUBLIC, PROTECTED ÉS PRIVATE 225
11.5 ÖRÖKLőDÉS 228
11.6 ADATTAGOK ÉS TAGFÜGGVÉNYEK 230
11.6.1 Konstansok 230
11.6.2 Statikus tagok 230
11.6.3 A barátság fogalma C++-ban;
friend függvények és osztályok 233
11.6.4 Bitmezők (bitfield) -
takarékoskodjunk a byte-okkal 238
11.6.5 Egymásba ágyazott osztályok 240
11.7 EGY SPECIÁLIS MUTATÓ - A "THIS" 241
11.8 SPECIÁLIS FÜGGVÉNYEK: CONSTRUCTOR, DESTRUCTOR, COPY CONSTRUCTOR 241
11.9 KONSTRUKTOROK ÉS A NEW OPERÁTOR 249
11.10 KONSTRUKTOROK ÉS DESTRUKTOROK VÉGREHAJTÁSI SORRENDJE 251
11.11 AUTOMATIKUS TÍPUSKONVERZIÓ A KONSTRUKTORBAN. AZ EXPLICIT KULCSSZÓ 255
11.12 ADATOK INICIALIZÁLÁSA A KONSTRUKTORBAN -
ÉRTÉKADÁS VAGY INICIALIZÁLÁSI LISTA? 258
11.13 ADATTAGOK SORRENDJE A KONSTRUKTOR INICIALIZÁLÁSI LISTÁJÁBAN 264
11.14 "KIVÉTELES" KONSTRUKTOROK 268
11.15 A COPY CONSTRUCTOR ÉS EGYENLőSÉG-OPERÁTOR 273
11.16 "KIVÉTELES" DESTRUKTOROK 283
11.17 VIRTUÁLIS DESTRUKTOR 285
11.18 A FORDÍTÁSI FÜGGőSÉGEK MINIMALIZÁLÁSA -
#INCLUDE HELYETT ELőRE DEKLARÁLÁS 291
11.19 A CHESHIRE-I MACSKA 293
11.20 VIRTUÁLIS FÜGGVÉNYEK - POLIMORFIZMUS A C++-BAN 296
11.21 KORAI KÖTES, KÉSőI KÖTÉS 297
11.22 VIRTUÁLIS FÜGGVÉNYEK ALAPÉRTELMEZETT PARAMÉTEREI 305
11.23 DOWNCAST ÉS UPCAST 306
11.24 VIRTUÁLIS ÖRÖKLőDÉS 312
11.25 ABSZTRAKT OSZTÁLYOK 316
11.26 A FUTÁSIDEJŰ TÍPUSINFORMÁCIÓ (RTTI) 320
11.27 A VIRTUÁLIS FÜGGVÉNY - ÉS AMI MÖGÖTTE VAN 322
11.28 NEMVIRTUÁLIS TAGFÜGGVÉNYEK ÚJRADEFINIÁLÁSA 327
11.29 SABLON OSZTÁLYOK (TEMPLATE CLASSES) 329
11.30 SABLONOK SPECIALIZÁLÓDÁSA 333
11.31 SABLONOSZTÁLYOK FORRÁSÁLLOMÁNYOKBA RENDEZÉSE 335
12 KIVÉTELEK KEZELÉSE A C++-BAN 336
12.1 NE MENJÜNK BIZTOSRA - PRÓBÁLKOZZUNK! TRY, CATCH, THROW 336
12.2 KIVÉTELEK ELKAPÁSA - ÉRTÉK SZERINTI, POINTER
ÉS REFERENCIA CATCH PARAMÉTEREK 341
12.3 KIVÉTEL-SPECIFIKÁCIÓ 345
12.4 A KIVÉTELKEZELÉS - ÉS AMI MÖGÖTTE VAN 348
13 AZ STL - A C++ SZABVÁNYOS SABLON KÖNYVTÁRA 349
13.1 KONTÉNEREK 350
13.2 ITERÁTOROK 354
13.3 ALGORITMUSOK 359
13.3.1 Kereső algoritmusok 359
13.3.2 Másoló algoritmusok 361
13.3.3 Rendező algoritmusok 362
14 TESZTELÉS ÉS HIBAKERESÉS 364
14.1 HIBAKERESÉS MS VISUAL C++-BAN 365
14.2 DEBUG ÉS RELEASE VERZIÓ 369
14.3 A HÍVÁS-VEREM (CALL STACK) 371
14.4 HIBAKERESÉS TÁVOLI GÉPEKEN (REMOTE DEBUG) 372
14.5 A VC++ PSZEUDOREGISZTEREI: @ERR, @TIB ÉS TÁRSAIK 374
14.6 HIBANAPLÓZÁS A GYAKORLATBAN - A CALLSTACK OSZTÁLY 376
15 TARTALOM ÉS FORMA. KÓDOLÁSI JAVASLATOK 380
15.1 A KÓD SZERVEZÉSE 381
15.2 A KÓD IGAZÍTÁSA 384
15.3 AZ EGYSÉGES JELÖLÉS 388
15.4 HASZNÁLATI UTASÍTÁS 391
| < Előző |
|---|





