Tech, szoftvertervezés és programozás

Szoftverfejlesztés, Shaderprogramozás, DirectX

  • A betűméret növelése
  • Alapértelmezett betűméret
  • A betűméret csökkentése
Címlap Szakkönyveim Gyakorlati C++

Gyakorlati C++

E-mail Nyomtatás PDF
Olvasóink értékelése: / 4
ElégtelenKitűnő 

Gyakorlati C++

Nyisztor Károly
Gyakorlati C++
Rejtett lehetoségek, különleges megoldások

ISBN: 963 09 4645 9

164 x 234 mm
400 oldal 3990 Ft

Megjelent: 2004 október 3.

A könyvhöz már nem egyszerű hozzájutni, de némi szerencsével, webboltokban vagy antikváriumokban még fellelhető.
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