Vorwort | 7 |
Danksagung | 8 |
Inhaltsverzeichnis | 9 |
1 Einführung | 12 |
2 DieSprache C++ | 16 |
2.1 Geschichte und Paradigmenwandel | 16 |
2.2 Grundlagen | 20 |
2.2.1 Bezeichner in C++ | 23 |
2.2.2 Der Präprozessor | 24 |
2.2.3 Variablen | 32 |
2.2.4 Standarddatentypen | 33 |
2.2.5 Literalkonstanten | 36 |
2.2.6 Konstanten | 37 |
2.2.7 Aufzählungen | 38 |
2.2.8 Arrays | 40 |
2.2.9 Zeiger | 40 |
2.2.10 Referenzen | 47 |
2.2.11 Typenkonvertierung | 48 |
2.2.12 Ausdrücke | 50 |
2.2.13 Operatoren | 51 |
2.2.14 Anweisungen | 55 |
2.2.15 Kontrollstrukturen | 56 |
2.2.16 Funktionen | 60 |
2.2.17 Funktionsüberladung | 65 |
2.2.18 Funktions - Inlining | 67 |
2.2.19 Makros | 69 |
2.2.20 Dynamische Speicherallokation | 70 |
2.2.21 Strukturen und Klassen | 78 |
2.2.22 Typenkonvertierungmit Konstruktoren | 102 |
2.2.23 Globale, automatischeund dynamische Instanziierung | 105 |
2.2.24 Speicherklassen | 111 |
2.2.25 Der Scope - Operator | 117 |
2.2.26 Verschachtelte Typen | 121 |
2.2.27 Die friend - Deklaration | 122 |
2.2.28 StatischeMethoden und Attribute | 123 |
2.2.29 Vererbung | 125 |
2.2.30 Virtuelle Methoden und Polymorphismus | 132 |
2.2.31 Operatoren der Typenkonvertierung | 138 |
2.2.32 Mehrfachvererbung | 145 |
2.2.33 Virtuelle Vererbung | 149 |
2.2.34 Das Schlüsselwort const | 152 |
2.2.35 Operatorüberladung | 156 |
2.2.36 Exception Handling | 166 |
3 Die Objektorientierte Programmierung mit C++ | 184 |
3.1 Der Klassenbegriff | 185 |
3.2 Die Rolle von Patterns und Idiomen | 187 |
3.2.1 Der Iterator | 189 |
3.2.2 Das Zustandsmuster | 190 |
3.2.3 Das Singleton -Muster | 198 |
3.3 Datenstrukturen und Containerklassen | 208 |
3.3.1 Die Liste | 209 |
3.3.2 Der Vektor | 219 |
3.3.3 Dynamische Container und das Problemder Speicherfragmentierung | 221 |
3.3.4 Verfeinerung des Zugriffs durch überladene Operatoren | 222 |
3.4 Arbeitenmit Invarianten | 224 |
4 Generische und generative Programmierung mit C++ | 232 |
4.1 Templates | 233 |
4.1.1 Funktionstemplates | 234 |
4.1.2 Klassentemplates | 237 |
4.1.3 Methodentemplates | 238 |
4.1.4 Instanziierung von Templates | 240 |
4.1.5 Member- Templates | 241 |
4.1.6 Spezialisierung von Templates | 242 |
4.1.7 Partielle Spezialisierung | 243 |
4.1.8 Vorgabeargumentefür Templateparameter | 246 |
4.1.9 Abhängige und qualifizierte Namen | 247 |
4.1.10 Explizite Qualifizierung von Templates | 252 |
4.1.11 Barton- Nackman- Trick | 253 |
4.1.12 Das Schlüsselwort typename | 255 |
4.1.13 Template - Templateparameter | 258 |
4.1.14 Container mit Templates | 262 |
4.1.15 Smart Pointer mit Templates | 266 |
4.1.16 Projektorganisationmit Templates | 272 |
4.2 Konzepte für den Einsatz von Templates | 279 |
4.2.1 „Policy Based Design“ | 281 |
4.2.2 Idiome für die Template - Programmierung | 282 |
4.2.3 Compiletime - Assertions | 283 |
4.3 Aspektorientierte Programmierung | 284 |
5 Die C++ - Standardbibliothek | 288 |
5.1 Die Geschichte der Standardbibliothek | 288 |
5.2 Die Teilbereiche der Standardbibliothek | 289 |
5.2.1 Die Streams | 291 |
5.2.2 Formatierungen auf einem ostream | 296 |
5.2.3 Die Manipulatoren | 297 |
5.2.4 Die File - Streams | 300 |
5.2.5 Die String- Streams | 301 |
5.2.6 Die STL | 303 |
5.2.7 Die Stringklasse std::string | 337 |
5.2.8 Pseudocontainer für optimiertes Rechnen | 343 |
5.2.9 Autopointer | 353 |
6 Das Softwareprojekt mit C++ | 358 |
6.1 Modularisierung eines C++ - Projekts | 358 |
6.1.1 Der Umgang mit Headerdateien | 359 |
6.1.2 Namensräume | 364 |
6.1.3 Das argumentenabhängigeLookup - Verfahren | 372 |
6.1.4 Einige Anmerkungen zumLinker | 374 |
6.1.5 Überladen der Operatoren new und delete | 378 |
6.2 Persistenz und Serialisierung | 385 |
6.3 Systemprogrammierungmit C++ | 388 |
6.3.1 Einfaches Objektpooling | 388 |
6.3.2 Nebenläufige Programmierung | 393 |
Literatur | 406 |
Abbildungsverzeichnis | 408 |
Listings | 410 |
Index | 420 |