Bjarne Stroustrup: The C++ Programming Language Special Edition

Hasonló dokumentumok

1. Bevezetés A C++ nem objektumorientált újdonságai 3

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?


A TANTÁRGY ADATLAPJA

A szerzõrõl... xi Bevezetés... xiii

Programozás módszertan

A TANTÁRGY ADATLAPJA

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

C++ Standard Template Library (STL)

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozás. C++ típusok, operátorok. Fodor Attila

Mintavételes szabályozás mikrovezérlő segítségével

Fejlett programozási nyelvek C++ Iterátorok

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

2 Access 2016 zsebkönyv

Programozási technológia

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

1. Alapok. Programozás II

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

Programozási nyelvek (ADA)

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Már megismert fogalmak áttekintése

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Java II. I A Java programozási nyelv alapelemei

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Programozás II. 2. Dr. Iványi Péter

Pénzügyi algoritmusok

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

C programozási nyelv

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Programozási nyelvek 6. előadás

Generikus osztályok, gyűjtemények és algoritmusok

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

I. rész: A Microsoft Visual C# és a Microsoft Visual Studio 2005 bemutatása. 1. Üdvözöljük a C# világában! 3

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Foglalkozási napló a 20 /20. tanévre

Hardver leíró nyelvek (HDL)

C++ programozási nyelv

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Interfészek. PPT 2007/2008 tavasz.

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Bevezetés a C++ programozási nyelvbe

Pénzügyi algoritmusok

Komputeralgebra Rendszerek

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Struktúra nélküli adatszerkezetek

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Bevezetés a programozásba Előadás: A const

Java programozási nyelv

A TANTÁRGY ADATLAPJA

2 Excel 2016 zsebkönyv

Programozási nyelvek Python

C# mesteri szinten 21 nap alatt

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Objektumok inicializálása

Informatika terméktervezőknek

Adatszerkezetek 1. előadás

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Imperatív programozás

2 Outlook 2016 zsebkönyv

3. modul - Szövegszerkesztés

Java II. I A Java programozási nyelv alapelemei

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Mutatók és mutató-aritmetika C-ben március 19.

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Adatszerkezetek és algoritmusok

Java programozási nyelv 5. rész Osztályok III.

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

OOP #14 (referencia-elv)

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.


Operációs rendszerek gyak.

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Átírás:

I. kötet

A kiadvány a következõ angol eredeti alapján készült: Bjarne Stroustrup: The C++ Programming Language Special Edition Copyright 2000 by AT&T. All rights reserved. No part of this book, including interior desing, cover design, and icons, may be reproduced or transmitted in any form, by any means (electronic, photocopying, recording, or otherwise) without the prior written permission of the publisher. Trademarked names appear throughout this book. Rather than list the names and entities that own the trademarks or insert a trademark symbol with each mention of the trademarked name, the publisher states that it is using the names for editorial purposes only and to the benefit of the trademark owner, with no intention of infringing upon that trademark. A szerzõ és a kiadó a lehetõ legnagyobb körültekintéssel járt el e kiadvány elkészítésekor. Sem a szerzõ, sem a kiadó nem vállal semminemû felelõsséget vagy garanciát a könyv tartalmával, teljességével kapcsolatban. Sem a szerzõ, sem a kiadó nem vonható felelõsségre bármilyen baleset vagy káresemény miatt, mely közvetve vagy közvetlenül kapcsolatba hozható e kiadvánnyal. Fordítás és magyar változat 2001 Szy György, Kiskapu Kft. Minden jog fenntartva! Translation and Hungarian edition 2001 György Szy, Kiskapu Kft. All rights reserved! Sorozatszerkesztõ: Szy György Mûszaki szerkesztõ: Csutak Hoffmann Levente Szakmai lektor: Porkoláb Zoltán Lektor: Rézmûves László Fordítók: Balázs Iván József, Bein Kornél, Ludányi Levente, Marcinkovics Tamás Felelõs kiadó a Kiskapu Kft. ügyvezetõ igazgatója 2001 Kiskapu Kft. 1081 Budapest Népszínház u. 31. Tel: (+36-1) 303-9119, (+36-1) 477-0443 Fax: (+36-1) 303-1619 http://www.kiskapu.hu/ e-mail: kiskapu@kiskapu.hu Elsõ kötet ISBN: 963 9301 18 3 Összesítõ ISBN: 963 9301 17 5 ö Készült a debreceni Kinizsi nyomdában Felelõs vezetõ: Bördõs János

Tartalomjegyzék Bevezetés 1. fejezet Megjegyzések az olvasóhoz 1.1. A könyv szerkezete.................................................. 3 1.1.1. Példák és hivatkozások........................................ 5 1.1.2. Gyakorlatok................................................. 7 1.1.3. Megjegyzés az egyes C++-változatokhoz.......................... 7 1.2. Hogyan tanuljuk a C++-t?............................................. 7 1.3. A C++ jellemzõi.................................................... 9 1.3.1. Hatékonyság és szerkezet..................................... 10 1.3.2. Filozófiai megjegyzés......................................... 12 1.4. Történeti megjegyzés................................................ 13 1.5. A C++ használata................................................. 15 1.6. C és C++........................................................ 17 1.6.1. Javaslatok C programozóknak.................................. 18 1.6.2. Javaslatok C++ programozóknak............................... 19 1.7. Programozási megfontolások a C++-ban................................. 20 1.8. Tanácsok......................................................... 22 1.8.1. Hivatkozások............................................... 23 2. fejezet Kirándulás a C++-ban 2.1. Mi a C++?....................................................... 27 2.2. Programozási megközelítések.......................................... 28 2.3. Eljárásközpontú programozás.......................................... 30 2.3.1. Változók és aritmetika........................................ 31 2.3.2. Elágazások és ciklusok........................................ 32

x 2.3.3. Mutatók és tömbök.......................................... 34 2.4. Moduláris programozás.............................................. 34 2.4.1. Külön fordítás............................................... 36 2.4.2. Kivételkezelés.............................................. 38 2.5. Elvont adatábrázolás................................................. 39 2.5.1. Típusokat leíró modulok....................................... 39 2.5.2. Felhasználói típusok.......................................... 42 2.5.3. Konkrét típusok............................................. 43 2.5.4. Absztrakt típusok............................................ 45 2.5.5. Virtuális függvények.......................................... 47 2.6. Objektumorientált programozás......................................... 48 2.6.1. Problémák a konkrét típusokkal................................. 48 2.6.2. Osztályhierarchiák........................................... 50 2.7. Általánosított programozás............................................ 52 2.7.1. Tárolók.................................................... 52 2.7.2. Általánosított algoritmusok.................................... 54 2.8. Utóirat........................................................... 56 2.9. Tanácsok......................................................... 56 3. fejezet Kirándulás a standard könyvtárban 3.1. Bevezetés........................................................ 57 3.2. Helló, világ!....................................................... 58 3.3. A standard könyvtár névtere........................................... 59 3.4. Kimenet.......................................................... 60 3.5. Karakterláncok..................................................... 61 3.5.1.C stílusú karakterláncok....................................... 63 3.6. Bemenet......................................................... 63 3.7. Tárolók.......................................................... 66 3.7.1. Vektor.................................................... 66 3.7.2. Tartományellenõrzés......................................... 68 3.7.3. Lista...................................................... 69 3.7.4. Asszociatív tömbök.......................................... 70 3.7.5. Szabványos tárolók.......................................... 71 3.8. Algoritmusok...................................................... 72 3.8.1. Bejárók használata........................................... 73 3.8.2. Bejárótípusok............................................... 75 3.8.3. Bemeneti és kimeneti bejárók.................................. 77 3.8.4. Bejárások és predikátumok.................................... 79 3.8.5. Tagfüggvényeket használó algoritmusok.......................... 81 3.8.6. A standard könyvtár algoritmusai................................ 82 3.9. Matematika....................................................... 82 3.9.1. Komplex számok............................................ 83 3.9.2. Vektoraritmetika............................................. 83 3.9.3. Alapszintû numerikus támogatás................................ 84 3.10. A standard könyvtár szolgáltatásai..................................... 84 3.11. Tanácsok........................................................ 85

xi Elsõ rész Alapok 4. fejezet Típusok és deklarációk 4.1. Típusok.......................................................... 90 4.1.1. Alaptípusok................................................ 91 4.2. Logikai típusok..................................................... 92 4.3. Karaktertípusok.................................................... 93 4.3.1. Karakterliterálok............................................. 95 4.4. Egész típusok...................................................... 95 4.4.1. Egész literálok.............................................. 96 4.5. Lebegõpontos típusok............................................... 96 4.5.1. Lebegõpontos literálok........................................ 97 4.6. Méretek.......................................................... 97 4.7. Void............................................................ 100 4.8. Felsoroló típusok.................................................. 100 4.9. Deklarációk...................................................... 102 4.9.1. A deklarációk szerkezete..................................... 104 4.9.2. Több név bevezetése........................................ 105 4.9.3. Nevek................................................... 106 4.9.4. Hatókörök................................................ 107 4.9.5. Kezdeti értékadás........................................... 109 4.9.6. Objektumok és balértékek.................................... 110 4.9.7. Typedef.................................................. 111 4.10. Tanácsok....................................................... 112 4.11. Gyakorlatok..................................................... 113 5. fejezet Mutatók, tömbök és struktúrák 5.1. Mutatók......................................................... 115 5.1.1. Nulla.................................................... 117 5.2. Tömbök......................................................... 117 5.2.1. Tömbök feltöltése.......................................... 118 5.2.2. Karakterliterálok............................................ 119 5.3. Tömbökre hivatkozó mutatók......................................... 121 5.3.1. Tömbök bejárása........................................... 123 5.4. Konstansok...................................................... 125 5.4.1. Mutatók és konstansok...................................... 128 5.5. Referenciák...................................................... 129 5.6. Void-ra hivatkozó mutatók............................................ 133 5.7. Struktúrák....................................................... 135 5.7.1. Egyenértékû típusok........................................ 138 5.8. Tanácsok........................................................ 139 5.9. Gyakorlatok...................................................... 139

xii 6. fejezet Kifejezések és utasítások 6.1. Egy asztali számológép.............................................. 142 6.1.1. Az elemzõ................................................ 142 6.1.2. A bemeneti függvény........................................ 148 6.1.3. Alacsonyszintû bemenet..................................... 151 6.1.4. Hibakezelés............................................... 152 6.1.5. A vezérlõ................................................. 153 6.1.6. Fejállományok............................................. 154 6.1.7. Parancssori paraméterek..................................... 155 6.1.8. Megjegyzés a stílussal kapcsolatban............................ 157 6.2. Operátorok áttekintés............................................. 158 6.2.1. Eredmények............................................... 161 6.2.2. Kiértékelési sorrend......................................... 163 6.2.3. Az operátorok sorrendje...................................... 164 6.2.4. Bitenkénti logikai mûveletek................................... 165 6.2.5. Növelés és csökkentés...................................... 167 6.2.6. Szabad tár................................................ 169 6.2.6.1. Tömbök.................................................. 171 6.2.6.2. Memória-kimerülés......................................... 172 6.2.7. Meghatározott típuskonverziók................................ 173 6.2.8. Konstruktorok.............................................. 175 6.3. Utasítások áttekintés.............................................. 176 6.3.1. Deklarációk mint utasítások................................... 177 6.3.2. Kiválasztó utasítások........................................ 178 6.3.2.1. Deklarációk feltételekben.................................... 181 6.3.3. Ciklusutasítások............................................ 182 6.3.3.1. Deklarációk a for utasításban.................................. 183 6.3.4. Goto..................................................... 183 6.4. Megjegyzések és behúzás........................................... 184 6.5. Tanácsok........................................................ 186 6.6. Gyakorlatok...................................................... 187 7. fejezet Függvények 7.1. Függvénydeklarációk............................................... 191 7.1.1. Függvénydefiníciók......................................... 192 7.1.2. Statikus változók........................................... 193 7.2. Paraméterátadás.................................................. 194 7.2.1. Tömb paraméterek.......................................... 196 7.3. Visszatérési érték.................................................. 197 7.4. Túlterhelt függvénynevek............................................ 199 7.4.1. A túlterhelés és a visszatérési típus............................. 202 7.4.2. A túlterhelés és a hatókör.................................... 202 7.4.3. A többértelmûség kézi feloldása.............................. 203 7.4.4. Több paraméter feloldása.................................... 204 7.5. Alapértelmezett paraméterek......................................... 205 7.6. Nem meghatározott számú paraméter................................... 206

xiii 7.7. Függvényre hivatkozó mutatók........................................ 209 7.8. Makrók......................................................... 214 7.8.1. Feltételes fordítás.......................................... 217 7.9. Tanácsok........................................................ 218 7.10. Gyakorlatok..................................................... 218 8. fejezet Névterek és kivételek 8.1. Modulok és felületek............................................... 221 8.2. Névterek........................................................ 224 8.2.1. Minõsített nevek........................................... 226 8.2.2. Using deklarációk........................................... 227 8.2.3. Using direktívák............................................ 229 8.2.4. Több felület használata...................................... 230 8.2.4.1. Felülettervezési módszerek................................... 232 8.2.5. A névütközések elkerülése.................................... 236 8.2.5.1. Névtelen névterek.......................................... 236 8.2.6. Nevek keresése............................................ 237 8.2.7. Névtér-álnevek............................................. 239 8.2.8. Névterek összefûzése....................................... 240 8.2.8.1. Kiválasztás................................................ 241 8.2.8.2. Összefûzés és kiválasztás..................................... 242 8.2.9. Névterek és régi kódok...................................... 243 8.2.9.1. Névterek és a C............................................ 244 8.2.9.2. Névterek és túlterhelés....................................... 245 8.2.9.3. A névterek nyitottak......................................... 246 8.3. Kivételek........................................................ 248 8.3.1. Dobás és elkapás......................................... 249 8.3.2. A kivételek megkülönböztetése................................ 251 8.3.3. Kivételek a számológépben................................... 253 8.3.3.1. Más hibakezelõ módszerek................................... 256 8.4. Tanácsok........................................................ 258 8.5. Gyakorlatok...................................................... 258 9. fejezet Forrásfájlok és programok 9.1. Külön fordítás..................................................... 261 9.2. Összeszerkesztés.................................................. 263 9.2.1. Fejállományok............................................. 266 9.2.2. A standard könyvtár fejállományai.............................. 268 9.2.3. Az egyszeri definiálás szabálya................................. 269 9.2.4. Összeszerkesztés nem C++ kóddal............................ 272 9.2.5. Az összeszerkesztés és a függvényekre hivatkozó mutatók........... 275 9.3. Fejállományok használata............................................ 276 9.3.1. Egyetlen fejállományos elrendezés............................. 276 9.3.2. Több fejállományos elrendezés................................ 280 9.3.2.1. A számológép egyéb moduljai................................. 282 9.3.2.2. A fejállományok használata................................... 285 9.3.3. Állomány-õrszemek........................................ 286

xiv 9.4. Programok....................................................... 288 9.4.1. Kezdeti értékadás nem lokális változóknak........................ 288 9.4.1.1. A program befejezése....................................... 289 9.5. Tanácsok........................................................ 291 9.6. Gyakorlatok...................................................... 291 Második rész Absztrakciós módszerek 10. fejezet Osztályok 10.1. Bevezetés...................................................... 295 10.2. Osztályok....................................................... 296 10.2.1. Tagfüggvények............................................ 296 10.2.2. Az elérhetõség szabályozása................................. 298 10.2.3. Konstruktorok............................................. 299 10.2.4. Statikus tagok............................................ 301 10.2.5. Osztály típusú objektumok másolása........................... 303 10.2.6. Konstans tagfüggvények.................................... 303 10.2.7. Önhivatkozás............................................. 304 10.2.7.1. Fizikai és logikai konstansok................................. 306 10.2.7.2. A mutable minõsítõ........................................ 307 10.2.8. Struktúrák és osztályok..................................... 309 10.2.9. Osztályon belüli függvénydefiníciók............................ 310 10.3. Hatékony felhasználói típusok........................................ 311 10.3.1. Tagfüggvények............................................ 315 10.3.2. Segédfüggvények......................................... 317 10.3.3. Operátorok túlterhelése..................................... 318 10.3.4. A konkrét osztályok jelentõsége............................... 319 10.4. Objektumok..................................................... 320 10.4.1. Destruktorok............................................. 320 10.4.2. Alapértelmezett konstruktorok................................ 321 10.4.3. Létrehozás és megsemmisítés................................ 322 10.4.4. Lokális változók........................................... 323 10.4.4.1. Objektumok másolása...................................... 323 10.4.5. A szabad tár.............................................. 325 10.4.6. Osztály típusú tagok........................................ 326 10.4.6.1. A tagok szükségszerû kezdeti értékadása........................ 327 10.4.6.2. Konstans tagok............................................ 328 10.4.6.3. Tagok másolása........................................... 329 10.4.7. Tömbök................................................. 330 10.4.8. Lokális statikus adatok...................................... 332 10.4.9. Nem lokális adatok......................................... 332 10.4.10. Ideiglenes objektumok..................................... 335 10.4.11. Az objektumok elhelyezése................................. 337 10.4.12. Uniók.................................................. 339 10.5. Tanácsok....................................................... 339 10.6. Gyakorlatok..................................................... 340

xv 11. fejezet Operátorok túlterhelése 11.1. Bevezetés...................................................... 344 11.2. Operátor függvények.............................................. 345 11.2.1. Egy- és kétoperandusú mûveletek............................. 346 11.2.2. Az operátorok elõre meghatározott jelentése..................... 347 11.2.3. Operátorok és felhasználói típusok............................. 348 11.2.4. Névterek operátorai........................................ 349 11.3. Komplex szám típusok............................................. 351 11.3.1. Tag és nem tag operátorok.................................. 352 11.3.2. Vegyes módú aritmetika..................................... 353 11.3.3. Kezdeti értékadás.......................................... 354 11.3.4. Másolás................................................. 356 11.3.5. Konstruktorok és konverziók.................................. 357 11.3.6. Literálok................................................. 359 11.3.7. Kiegészítõ tagfüggvények.................................... 359 11.3.8. Segédfüggvények......................................... 360 11.4. Konverziós operátorok............................................. 361 11.4.1. Többértelmûség........................................... 363 11.5. Barát függvények................................................. 366 11.5.1. A barát függvények elérése.................................. 367 11.5.2. Barátok és tagfüggvények................................... 369 11.6. Nagy objektumok................................................. 371 11.7. Alapvetõ operátorok............................................... 373 11.7.1. Explicit konstruktorok....................................... 374 11.8. Indexelés....................................................... 376 11.9. Függvényhívás................................................... 377 11.10. Indirekció...................................................... 379 11.11. Növelés és csökkentés............................................ 382 11.12. Egy karakterlánc osztályok......................................... 384 11.13. Tanácsok...................................................... 390 11.14. Gyakorlatok.................................................... 391 12. fejezet Származtatott osztályok 12.1. Bevezetés...................................................... 395 12.2. Származtatott osztályok............................................ 397 12.2.1. Tagfüggvények............................................ 400 12.2.2. Konstruktorok és destruktorok................................ 402 12.2.3. Másolás................................................. 403 12.2.4. Osztályhierarchiák......................................... 404 12.2.5. Típusmezõk.............................................. 405 12.2.6. Virtuális függvények........................................ 407 12.3. Absztrakt osztályok................................................ 411 12.4. Osztályhierarchiák tervezése......................................... 413 12.4.1. Hagyományos osztályhierarchia............................... 414 12.4.1.1. Bírálat................................................... 417

xvi 12.4.2. Absztrakt osztályok........................................ 418 12.4.3. Egyéb megvalósítások...................................... 421 12.4.3.1. Bírálat................................................... 423 12.4.4. Az objektumok létrehozásának adott helyre korlátozása............. 424 12.5. Osztályhierarchiák és absztrakt osztályok............................... 426 12.6. Tanácsok....................................................... 426 12.7. Gyakorlatok..................................................... 427 13. fejezet Sablonok 13.1. Bevezetés...................................................... 431 13.2. Egy egyszerû karakterlánc sablon..................................... 433 13.2.1. Sablonok meghatározása.................................... 435 13.2.2. Sablonok példányosítása.................................... 436 13.2.3. Sablon paraméterek........................................ 437 13.2.4. Típusok egyenértékûsége................................... 438 13.2.5. Típusellenõrzés........................................... 439 13.3. Függvénysablonok................................................ 440 13.3.1. A függvénysablonok paraméterei.............................. 441 13.3.2. Függvénysablonok túlterhelése............................... 443 13.4. Eljárásmód megadása sablonparaméterekkel............................. 446 13.4.1. Alapértelmezett sablonparaméterek............................ 447 13.5. Specializáció.................................................... 449 13.5.1. Specializációk sorrendje..................................... 452 13.5.2. Függvénysablon specializáció................................ 453 13.6. Öröklõdés és sablonok............................................. 455 13.6.1. Paraméterezés és öröklõdés................................. 457 13.6.2. Tag sablonok............................................. 457 13.6.3. Öröklõdési viszonyok....................................... 459 13.6.3.1. Sablonok konverziója....................................... 460 13.7. A forráskód szerkezete............................................. 461 13.8. Tanácsok....................................................... 463 13.9. Gyakorlatok..................................................... 465 14. fejezet Kivételkezelés 14.1. Hibakezelés..................................................... 467 14.1.1. A kivételek más megközelítései............................... 470 14.2. A kivételek csoportosítása.......................................... 471 14.2.1. Származtatott kivételek..................................... 473 14.2.2. Összetett kivételek......................................... 474 14.3. A kivételek elkapása............................................... 475 14.3.1. A kivételek továbbdobása................................... 476 14.3.2. Minden kivétel elkapása..................................... 477 14.3.2.1. A kezelõk sorrendje........................................ 478 14.4. Erõforrások kezelése............................................... 479 14.4.1. Konstruktorok és destruktorok használata....................... 481 14.4.2. Auto_ptr................................................. 483

xvii 14.4.3. Figyelmeztetés............................................ 485 14.4.4. A kivételek és a new operátor................................ 485 14.4.5. Az erõforrások kimerülése................................... 486 14.4.6. Kivételek konstruktorokban.................................. 489 14.4.6.1. Kivételek és a tagok kezdeti értékadása......................... 490 14.4.6.2. Kivételek és másolás....................................... 491 14.4.7. Kivételek destruktorokban................................... 491 14.5. Kivételek, amelyek nem hibák........................................ 492 14.6. Kivételek specifikációja............................................. 493 14.6.1. A kivételek ellenõrzése...................................... 494 14.6.2. Váratlan kivételek.......................................... 496 14.6.3. Kivételek leképezése....................................... 497 14.6.3.1. Kivételek felhasználói leképezése............................. 497 14.6.3.2. Kivételek típusának visszaállítása.............................. 499 14.7. El nem kapott kivételek............................................. 499 14.8. A kivételek és a hatékonyság........................................ 501 14.9. A hibakezelés egyéb módjai......................................... 503 14.10. Szabványos kivételek............................................. 505 14.11. Tanácsok...................................................... 508 14.12. Gyakorlatok.................................................... 509 15. fejezet Osztályhierarchiák 15.1. Bevezetés és áttekintés............................................ 511 15.2. Többszörös öröklõdés.............................................. 512 15.2.1. A többértelmûség feloldása.................................. 514 15.2.2. Öröklõdés és using deklarációk............................... 515 15.2.3. Ismétlõdõ bázisosztályok.................................... 517 15.2.3.1. Felülírás................................................. 518 15.2.4. Virtuális bázisosztályok...................................... 520 15.2.4.1. Virtuális bázisosztályok programozása.......................... 521 15.2.5. A többszörös öröklõdés használata............................ 523 15.2.5.1. A virtuális bázisosztályok függvényeinek felülírása................ 526 15.3. Hozzáférés-szabályozás............................................. 528 15.3.1. Védett tagok............................................. 530 15.3.1.1. A védett tagok használata.................................... 531 15.3.2. Bázisosztályok elérése...................................... 532 15.3.2.1. A többszörös öröklõdés és az elérhetõség....................... 533 15.3.2.2. A using deklarációk és az elérhetõség.......................... 534 15.4. Futási idejû típusinformáció......................................... 535 15.4.1. Dynamic_cast............................................. 536 15.4.1.1. Referenciák dinamikus típuskényszerítése....................... 539 15.4.2. Osztályhierarchiák bejárása.................................. 540 15.4.2.1. Statikus és dinamikus konverzió.............................. 542 15.4.3. Osztályobjektumok felépítése és megsemmisítése................ 543

xviii 15.4.4. Typeid és kiterjesztett típusinformáció.......................... 544 15.4.4.1. Kiterjesztett típusinformáció.................................. 546 15.4.5. Az RTTI helyes és helytelen használata......................... 547 15.5. Tagra hivatkozó mutatók............................................ 549 15.5.1. Bázis- és származtatott osztályok.............................. 552 15.6. A szabad tár..................................................... 553 15.6.1. Memóriafoglalás tömbök számára............................. 556 15.6.2. Virtuális konstruktorok..................................... 556 15.7. Tanácsok....................................................... 558 15.8. Gyakorlatok..................................................... 559

II. kötet

A kiadvány a következõ angol eredeti alapján készült: Bjarne Stroustrup: The C++ Programming Language Special Edition Copyright 2000 by AT&T. All rights reserved. No part of this book, including interior desing, cover design, and icons, may be reproduced or transmitted in any form, by any means (electronic, photocopying, recording, or otherwise) without the prior written permission of the publisher. Trademarked names appear throughout this book. Rather than list the names and entities that own the trademarks or insert a trademark symbol with each mention of the trademarked name, the publisher states that it is using the names for editorial purposes only and to the benefit of the trademark owner, with no intention of infringing upon that trademark. A szerzõ és a kiadó a lehetõ legnagyobb körültekintéssel járt el e kiadvány elkészítésekor. Sem a szerzõ, sem a kiadó nem vállal semminemû felelõsséget vagy garanciát a könyv tartalmával, teljességével kapcsolatban. Sem a szerzõ, sem a kiadó nem vonható felelõsségre bármilyen baleset vagy káresemény miatt, mely közvetve vagy közvetlenül kapcsolatba hozható e kiadvánnyal. Fordítás és magyar változat 2001 Szy György, Kiskapu Kft. Minden jog fenntartva! Translation and Hungarian edition 2001 György Szy, Kiskapu Kft. All rights reserved! Sorozatszerkesztõ: Szy György Mûszaki szerkesztõ: Csutak Hoffmann Levente Szakmai lektor: Porkoláb Zoltán Lektor: Rézmûves László Fordítók: Balázs Iván József, Bein Kornél, Ludányi Levente, Marcinkovics Tamás Felelõs kiadó a Kiskapu Kft. ügyvezetõ igazgatója 2001 Kiskapu Kft. 1081 Budapest Népszínház u. 31. Tel: (+36-1) 303-9119, (+36-1) 477-0443 Fax: (+36-1) 303-1619 http://www.kiskapu.hu/ e-mail: kiskapu@kiskapu.hu Második kötet ISBN: 963 9301 19 1 Összesítõ ISBN: 963 9301 17 5 ö Készült a debreceni Kinizsi nyomdában Felelõs vezetõ: Bördõs János A könyv az Oktatási Minisztérium támogatásával, a Felsõoktatási Pályázatok Irodája által lebonyolított felsõoktatási tankönyvtámogatási program keretében jelent meg.

Tartalomjegyzék Harmadik rész A standard könyvtár 16. fejezet A könyvtár szerkezete és a tárolók 16.1. A standard könyvtár............................................... 563 16.1.1. Tervezési korlátozások...................................... 565 16.1.2. A standard könyvtár szerkezete............................... 566 16.1.3. Nyelvi elemek támogatása................................... 571 16.2. A tárolók szerkezete............................................... 572 16.2.1. Egyedi célú tárolók és bejárók................................ 572 16.2.2. Tárolók közös õssel........................................ 576 16.2.3. A standard könyvtár tárolói................................... 581 16.3. A vektor........................................................ 583 16.3.1. Típusok................................................. 583 16.3.2. Bejárók.................................................. 585 16.3.3. Az elemek elérése......................................... 587 16.3.4. Konstruktorok............................................. 589 16.3.5. Veremmûveletek.......................................... 593 16.3.6. Listamûveletek............................................ 595 16.3.7. Az elemek kiválasztása...................................... 599 16.3.8. Méret és kapacitás......................................... 600 16.3.9. További tagfüggvények...................................... 603 16.3.10. Segédfüggvények......................................... 603 16.3.11. Vector<bool>........................................... 604 16.4. Tanácsok....................................................... 605 16.5. Feladatok....................................................... 606 17. fejezet Szabványos tárolók 17.1. A szabványos tárolók.............................................. 609 17.1.1. Mûveletek áttekintés...................................... 610 17.1.2. Tárolók áttekintés........................................ 615 17.1.3. Ábrázolás................................................ 616 17.1.4. Megkötések az elemekre.................................... 618 17.1.4.1. Összehasonlítások......................................... 619 17.1.4.2. További relációs mûveletek.................................. 621

viii 17.2. Sorozatok....................................................... 622 17.2.1. A vector................................................. 622 17.2.2. A list................................................... 623 17.2.2.1. Áthelyezés, rendezés, összefésülés............................. 623 17.2.2.2. Mûveletek a lista elején..................................... 626 17.2.2.3. További mûveletek......................................... 626 17.2.3. A deque................................................. 629 17.3. Sorozat-átalakítók................................................. 629 17.3.1. A stack.................................................. 630 17.3.2. A queue................................................. 632 17.3.3. A priority_queue........................................... 633 17.4. Asszociatív tárolók................................................ 636 17.4.1. A map.................................................. 637 17.4.1.1. Típusok................................................. 637 17.4.1.2. Bejárók és párok.......................................... 638 17.4.1.3. Indexelés................................................ 640 17.4.1.4. Konstruktorok............................................ 642 17.4.1.5. Összehasonlítások......................................... 642 17.4.1.6. Mûveletek asszociatív tömbökkel.............................. 644 17.4.1.7. Listamûveletek............................................ 646 17.4.1.8. További mûveletek......................................... 648 17.4.2. A multimap.............................................. 649 17.4.3. A set................................................... 650 17.4.4. A multiset............................................... 651 17.5. Majdnem-tárolók................................................. 652 17.5.1. Karakterláncok............................................ 652 17.5.2. A valarray................................................ 652 17.5.3. Bithalmazok.............................................. 652 17.5.3.1. Konstruktorok............................................ 654 17.5.3.2. Bitkezelõ mûveletek........................................ 655 17.5.3.3. További mûveletek......................................... 656 17.5.4. Beépített tömbök.......................................... 657 17.6. Új tárolók létrehozása.............................................. 659 17.6.1. A hash_map............................................. 659 17.6.2. Ábrázolás és létrehozás..................................... 661 17.6.2.1. Keresések................................................ 663 17.6.2.2. Törlés és átméretezés....................................... 665 17.6.2.3. Hasítás.................................................. 666 17.6.3. További hasított asszociatív tárolók............................ 668 17.7. Tanácsok....................................................... 668 17.8. Gyakorlatok..................................................... 669 18. fejezet Algoritmusok és függvényobjektumok 18.1. Bevezetõ....................................................... 673 18.2. A standard könyvtár algoritmusainak áttekintése.......................... 674 18.3. Sorozatok és tárolók............................................... 681 18.3.1. Bemeneti sorozatok........................................ 682 18.4. Függvényobjektumok.............................................. 684

ix 18.4.1. Függvényobjektumok bázisosztályai............................ 685 18.4.2. Predikátumok............................................. 686 18.4.2.1. A predikátumok áttekintése.................................. 687 18.4.3. Aritmetikai függvényobjektumok.............................. 688 18.4.4. Lekötõk, átalakítók és tagadók................................ 689 18.4.4.1. Lekötõk................................................. 691 18.4.4.2. Tagfüggvény-átalakítók..................................... 693 18.4.4.3. Függvényre hivatkozó mutatók átalakítói........................ 694 18.4.4.4. Tagadók................................................. 695 18.5. Nem módosító algoritmusok sorozatokon............................... 697 18.5.1. A for_each............................................... 697 18.5.2. A find függvénycsalád...................................... 699 18.5.3. A count()................................................ 700 18.5.4. Egyenlõség és eltérés...................................... 701 18.5.5. Keresés................................................. 703 18.6. Módosító algoritmusok sorozatokra.................................... 704 18.6.1. Másolás................................................. 705 18.6.2. Transzformációk........................................... 707 18.6.3. Ismétlõdõ elemek törlése.................................... 709 18.6.3.1. Rendezési szempont........................................ 711 18.6.4. Helyettesítés............................................. 712 18.6.5. Törlés................................................... 714 18.6.6. Feltöltés és létrehozás...................................... 714 18.6.7. Megfordítás és elforgatás................................... 715 18.6.8. Elemek felcserélése........................................ 717 18.7. Rendezett sorozatok............................................... 717 18.7.1. Rendezés................................................ 718 18.7.2. Bináris keresés............................................ 719 18.7.3. Összefésülés............................................. 721 18.7.4. Felosztás................................................ 721 18.7.5. Halmazmûveletek sorozatokon................................ 722 18.8. A kupac........................................................ 724 18.9. Minimum és maximum............................................. 725 18.10. Permutációk.................................................... 726 18.11. C stílusú algoritmusok............................................ 727 18.12. Tanácsok...................................................... 728 18.13. Gyakorlatok.................................................... 729 19. fejezet Bejárók és memóriafoglalók 19.1. Bevezetés...................................................... 734 19.2. Bejárók és sorozatok.............................................. 734 19.2.1. A bejárók mûveletei........................................ 735 19.2.2. A bejáró jellemzõi.......................................... 737 19.2.3. Bejáró-kategóriák.......................................... 739 19.2.4. Beszúró bejárók........................................... 742 19.2.5. Visszafelé haladó bejárók.................................... 744 19.2.6. Adatfolyamok bejárói....................................... 745 19.2.6.1. Átmeneti tárak adatfolyamokhoz.............................. 748

x 19.3. Ellenõrzött bejárók................................................ 750 19.3.1. Kivételek, tárolók és algoritmusok............................. 756 19.4. Memóriafoglalók.................................................. 758 19.4.1. A szabványos memóriafoglaló................................ 758 19.4.2. Felhasználói memóriafoglalók................................. 763 19.4.3. Általánosított memóriafoglalók................................ 766 19.4.4. Elõkészítetlen memória..................................... 768 19.4.5. Dinamikus memória........................................ 771 19.4.6. C stílusú helyfoglalás....................................... 772 19.5. Tanácsok....................................................... 773 19.6. Gyakorlatok..................................................... 774 20. fejezet Karakterláncok 20.1. Bevezetés...................................................... 775 20.2. Karakterek...................................................... 776 20.2.1. Karakterjellemzõk.......................................... 777 20.3. A basic_string osztály............................................. 780 20.3.1. Típusok................................................. 781 20.3.2. Bejárók.................................................. 782 20.3.3. Az elemek elérése......................................... 783 20.3.4. Konstruktorok............................................. 784 20.3.5. Hibák................................................... 786 20.3.6. Értékadás................................................ 788 20.3.7. Átalakítás C stílusú karakterláncra............................. 789 20.3.8. Összehasonlítás........................................... 791 20.3.9. Beszúrás................................................ 793 20.3.10. Összefûzés.............................................. 795 20.3.11. Keresés................................................ 796 20.3.12. Csere.................................................. 797 20.3.13. Részláncok.............................................. 799 20.3.14. Méret és kapacitás........................................ 801 20.3.15. Ki- és bemeneti mûveletek.................................. 801 20.3.16. Felcserélés.............................................. 802 20.4. A C standard könyvtára............................................ 802 20.4.1. C stílusú karakterláncok..................................... 803 20.4.2. Karakterek osztályozása..................................... 805 20.5. Tanácsok....................................................... 806 20.6. Gyakorlatok..................................................... 807 21. fejezet Adatfolyamok 21.1. Bevezetõ....................................................... 811 21.2. Kimenet........................................................ 814 21.2.1. Kimeneti adatfolyamok...................................... 816 21.2.2. Beépített típusok kimenete.................................. 818 21.2.3. Felhasználói típusok kimenete................................ 821 21.2.3.1. Virtuális kimeneti függvények................................ 822 21.3. Bemenet....................................................... 823 21.3.1. Bemeneti adatfolyamok..................................... 823 21.3.2. Beépített típusok bemenete.................................. 824

xi 21.3.3. Az adatfolyam állapota...................................... 827 21.3.4. Karakterek beolvasása...................................... 829 21.3.5. Felhasználói típusok beolvasása............................... 833 21.3.6. Kivételek................................................ 834 21.3.7. Adatfolyamok összekötése................................... 836 21.3.8. Õrszemek................................................ 838 21.4. Formázás....................................................... 839 21.4.1. Formázási állapot.......................................... 840 21.4.1.1. Formázási állapot lemásolása................................. 842 21.4.2. Egész kimenet............................................ 842 21.4.3. Lebegõpontos szám kimenet................................. 843 21.4.4. Kimeneti mezõk........................................... 845 21.4.5. Mezõk igazítása........................................... 847 21.4.6. Módosítók............................................... 848 21.4.6.1. Módosítók, melyek paramétereket várnak....................... 850 21.4.6.2. Szabványos ki- és bemeneti módosítók......................... 851 21.4.6.3. Felhasználói módosítók..................................... 853 21.5. Fájl- és karakterlánc-folyamok........................................ 855 21.5.1. Fájlfolyamok.............................................. 856 21.5.2. Adatfolyamok lezárása...................................... 859 21.5.3. Karakterlánc-folyamok...................................... 860 21.6. Ki- és bemeneti átmeneti tárak....................................... 862 21.6.1. Kimeneti adatfolyamok és átmeneti tárolók...................... 863 21.6.2. Bemeneti adatfolyamok és átmeneti tárolók..................... 865 21.6.3. Az adatfolyamok és az átmeneti tárak kapcsolata.................. 866 21.6.4. Adatfolyamok átmeneti tárolása............................... 867 21.7. Helyi sajátosságok................................................ 873 21.7.1. Adatfolyam-visszahívások.................................... 875 21.8. C stílusú ki- és bemenet............................................ 876 21.9. Tanácsok....................................................... 880 21.10. Feladatok...................................................... 881 22. fejezet Számok 22.1. Bevezetés...................................................... 886 22.2. A számtípusok korlátozásai.......................................... 886 22.2.1. Korlátozási makrók......................................... 890 22.3. Szabványos matematikai függvények.................................. 890 22.4. Vektormûveletek.................................................. 892 22.4.1. Valarray létrehozása........................................ 893 22.4.2. A valarray indexelése és az értékadás.......................... 894 22.4.3. Mûveletek tagfüggvényként.................................. 896 22.4.4. Nem tagfüggvényként megvalósított mûveletek................... 900 22.4.5. Szeletek................................................. 901 22.4.6. A slice_array.............................................. 904 22.4.7. Ideiglenes változók, másolás, ciklusok.......................... 909 22.4.8. Általánosított szeletek...................................... 912 22.4.9. Maszkok................................................. 914 22.4.10. Indirekt tömbök.......................................... 915 22.5. Komplex aritmetika................................................ 915

xii 22.6. Általánosított numerikus algoritmusok.................................. 918 22.6.1. Az accumulate()........................................... 919 22.6.2. Az inner_product.......................................... 920 22.6.3. Növekményes változás...................................... 921 22.7. Véletlenszámok.................................................. 923 22.8. Tanácsok....................................................... 925 22.9. Gyakorlatok..................................................... 926 Negyedik rész Tervezés a C++ segítségével 23.fejezet Fejlesztés és tervezés 23.1. Áttekintés...................................................... 931 23.2. Bevezetés...................................................... 932 23.3. Célok és eszközök................................................. 935 23.4. A fejlesztési folyamat.............................................. 939 23.4.1. A fejlesztés körforgása...................................... 941 23.4.2. Tervezési célok............................................ 944 23.4.3. Tervezési lépések.......................................... 946 23.4.3.1. Elsõ lépés: keressünk osztályokat............................. 947 23.4.3.2. Második lépés: határozzuk meg a mûveleteket................... 951 23.4.3.3. Harmadik lépés: határozzuk meg az összefüggéseket.............. 953 23.4.3.4. Negyedik lépés: határozzuk meg a felületeket.................... 953 23.4.3.5. Osztályhierarchiák újraszervezése............................. 954 23.4.3.6. Modellek használata........................................ 956 23.4.4. Kísérletezés és elemzés..................................... 957 23.4.5. Tesztelés................................................ 960 23.4.6. A programok karbantartása................................. 961 23.4.7. Hatékonyság............................................. 962 23.5. Vezetés........................................................ 963 23.5.1. Újrahasznosítás........................................... 963 23.5.2. Méret és egyensúly........................................ 965 23.5.3. Egyének................................................. 967 23.5.4. Hibrid tervezés............................................ 969 23.6. Jegyzetek...................................................... 971 23.7. Tanácsok....................................................... 973 24. fejezet Tervezés és programozás 24.1. Áttekintés...................................................... 975 24.2. A tervezés és a programozási nyelv................................... 976 24.2.1. Az osztályok figyelmen kívül hagyása........................... 978 24.2.2. Az öröklés elkerülése....................................... 981 24.2.3. A statikus típusellenorzés figyelmen kívül hagyása................. 982 24.2.4. A programozás elkerülése................................... 985 24.2.5. Az osztályhierarchiák kizárólagos használata..................... 987 24.3. Osztályok....................................................... 988 24.3.1. Mit ábrázolnak az osztályok?................................. 989 24.3.2. Osztályhierarchiák......................................... 991 24.3.2.1. Osztályhierarchián belüli függések............................. 994 24.3.3. Tartalmazási kapcsolatok.................................... 996