Grundkurs C++: C++-Programmierung verständlich erklärt
von: Jürgen Wolf
Galileo Press, 2011
ISBN: 9783836215473
Sprache: Deutsch
414 Seiten, Download: 2152 KB
Format: PDF, auch als Online-Lesen
Liebe Leserin, lieber Leser, | 3 | ||
Auf einen Blick | 4 | ||
Inhalt | 6 | ||
1 Einstieg in die Welt von C++ | 16 | ||
1.1 Die (Kurz-)Geschichte von C++ | 16 | ||
1.2 Der ANSI-C++-Standard | 18 | ||
1.3 Was benötige ich für C++? | 19 | ||
1.4 Welches Betriebssystem ...? | 21 | ||
1.5 Schreibkonventionen | 21 | ||
1.6 Was kann ich von dem Buch erwarten? | 22 | ||
1.7 Listings zum Buch | 22 | ||
1.8 Aufgaben im Buch | 22 | ||
1.8.1 Level 1 | 22 | ||
1.8.2 Level 2 | 23 | ||
1.8.3 Level 3 | 23 | ||
2 Verwendung der Basisdatentypen in C++ | 24 | ||
2.1 Das erste Programm in C++ | 24 | ||
2.2 Die Standard-Ein-/Ausgabestreams | 27 | ||
2.2.1 Die Streams von C++ | 27 | ||
2.2.2 Ausgabe mit »cout« | 28 | ||
2.2.3 Ausgabe mit »cerr« oder »clog« | 29 | ||
2.2.4 Eingabe mit »cin« | 30 | ||
2.3 Einige Symbole von C++ | 31 | ||
2.3.1 Bezeichner | 31 | ||
2.3.2 Literale | 32 | ||
2.3.3 Kommentare | 33 | ||
2.4 Grundlagen zu den Basisdatentypen | 34 | ||
2.4.1 Deklaration und Definition | 34 | ||
2.4.2 Initialisieren einer Variablen | 36 | ||
2.4.3 Ganzzahltypen | 36 | ||
2.4.4 Vorzeichenlos und vorzeichenbehaftet | 43 | ||
2.4.5 Fließkommazahlentypen | 45 | ||
2.4.6 Limits für die Basisdatentypen | 47 | ||
2.5 Rechnen mit Zahlen | 48 | ||
2.5.1 Arithmetische Operatoren | 49 | ||
2.5.2 Ungenaue Fließkommazahlen | 51 | ||
2.5.3 Erweiterte Darstellung arithmetischer Operatoren | 53 | ||
2.5.4 Inkrement- und Dekrementoperator | 53 | ||
2.6 Typumwandlung | 55 | ||
2.6.1 Implizite Umwandlung des Compilers | 55 | ||
2.6.2 Explizite Typumwandlung | 59 | ||
2.6.3 Neue C++-Typumwandlungs-Operatoren | 61 | ||
2.7 Konstanten | 64 | ||
2.8 Aufgaben | 64 | ||
2.8.1 Level 1 | 65 | ||
2.8.2 Level 2 | 65 | ||
2.8.3 Level 3 | 66 | ||
3 Kontrollstrukturen, Funktionen und Präprozessor- Direktiven | 68 | ||
3.1 Kontrollstrukturen | 68 | ||
3.1.1 Anweisungen und Anweisungsblöcke | 68 | ||
3.1.2 Verzweigungen | 69 | ||
3.1.3 Der Bedingungsoperator ?: | 77 | ||
3.1.4 Logische Operatoren | 77 | ||
3.1.5 Die Fallunterscheidung – »switch« | 80 | ||
3.1.6 Schleifen | 83 | ||
3.2 Funktionen | 93 | ||
3.2.1 Funktionen definieren | 94 | ||
3.2.2 Funktionen aufrufen | 95 | ||
3.2.3 Funktionen deklarieren | 96 | ||
3.2.4 Funktionsparameter (Call-by-Value) | 97 | ||
3.2.5 Standardparameter | 98 | ||
3.2.6 Rückgabewert von Funktionen | 100 | ||
3.2.7 Funktionen überladen | 102 | ||
3.2.8 Gültigkeitsbereich von lokalen und globalen Variablen | 104 | ||
3.2.9 Inline-Funktionen | 106 | ||
3.2.10 Die »main«-Funktion | 107 | ||
3.2.11 Programmende | 108 | ||
3.3 Präprozessor-Direktiven | 109 | ||
3.3.1 Die »#include«-Direktive | 110 | ||
3.3.2 Die »#define«-Direktive | 112 | ||
3.3.3 Bedingte Kompilierung | 117 | ||
3.3.4 Weitere Präprozessor-Direktiven | 119 | ||
3.4 Aufgaben | 120 | ||
3.4.1 Level 1 | 120 | ||
3.4.2 Level 2 | 121 | ||
3.4.3 Level 3 | 122 | ||
4 Höhere und fortgeschrittene Datentypen | 124 | ||
4.1 Zeiger | 124 | ||
4.1.1 Zeiger deklarieren | 125 | ||
4.1.2 Adresse im Zeiger speichern | 125 | ||
4.1.3 Zeiger dereferenzieren | 127 | ||
4.1.4 Speichergröße von Zeigern | 129 | ||
4.1.5 Zeigerarithmetik | 130 | ||
4.1.6 Mehrfache Indirektion | 131 | ||
4.1.7 void-Zeiger | 131 | ||
4.2 Referenzen | 132 | ||
4.3 Arrays | 134 | ||
4.3.1 Der C++-Standardtyp »vector« | 134 | ||
4.3.2 C-Arrays | 137 | ||
4.4 Zeichenketten verwenden | 141 | ||
4.4.1 Der C++-Standardtyp »string« | 141 | ||
4.4.2 C-Zeichenketten | 143 | ||
4.5 C-Arrays und C-Strings versus Zeiger | 145 | ||
4.5.1 C-Array und Zeiger | 146 | ||
4.5.2 C-String und Zeiger | 148 | ||
4.5.3 Zeigerarrays | 149 | ||
4.6 Höhere Datentypen bei Funktionen verwenden | 150 | ||
4.6.1 Zeiger als Funktionsparameter | 151 | ||
4.6.2 Zeiger als Rückgabewert | 153 | ||
4.6.3 Referenzen als Funktionsparameter | 154 | ||
4.6.4 Referenzen als Rückgabewert | 155 | ||
4.6.5 C-Arrays oder C-Strings als Funktionsparameter | 158 | ||
4.7 Dynamische Speicherobjekte | 160 | ||
4.7.1 Dynamisch Objekte mit »new« anlegen | 161 | ||
4.7.2 Fehler bei der Speicheranforderung abfangen | 163 | ||
4.7.3 Speicher mit »delete« wieder freigeben | 163 | ||
4.8 Strukturen | 165 | ||
4.8.1 Strukturen deklarieren | 166 | ||
4.8.2 Zugriff auf die Strukturelemente | 166 | ||
4.8.3 Zugriff auf die Elemente über Strukturzeiger | 167 | ||
4.8.4 Strukturen vergleichen | 169 | ||
4.8.5 Dynamische Datenstrukturen mit Strukturen | 169 | ||
4.9 Union | 173 | ||
4.10 Aufzählungstyp »enum« | 174 | ||
4.11 Eigene Namen mit »typedef« | 175 | ||
4.12 Aufgaben | 176 | ||
4.12.1 Level 1 | 176 | ||
4.12.2 Level 2 | 177 | ||
4.12.3 Level 3 | 178 | ||
5 Modularisierung | 180 | ||
5.1 Namensräume | 180 | ||
5.1.1 Neuen Namensbereich deklarieren | 180 | ||
5.1.2 Namensbereich verschachteln | 182 | ||
5.1.3 Namensbereich ist ein eigener Gültigkeitsbereich | 182 | ||
5.1.4 Namensbereich mit »using« importieren | 185 | ||
5.1.5 Einzelne Bezeichner mit »using« importieren | 186 | ||
5.1.6 Aliasse für Namensbereiche | 186 | ||
5.2 Speicherklassenattribute | 186 | ||
5.2.1 Schlüsselwort »extern« | 187 | ||
5.2.2 Schlüsselwort »static« | 187 | ||
5.2.3 Schlüsselwort »register« | 190 | ||
5.2.4 Schlüsselwort »auto« | 191 | ||
5.3 Typqualifikatoren | 192 | ||
5.3.1 Schlüsselwort »const« | 192 | ||
5.3.2 Schlüsselwort »volatile« | 193 | ||
5.4 Funktionsattribute | 194 | ||
5.5 Modulare Programmierung | 194 | ||
5.5.1 Aufteilung | 195 | ||
5.5.2 Die öffentliche Schnittstelle (Headerdatei) | 197 | ||
5.5.3 Private Datei(en) | 198 | ||
5.5.4 Die Client-Datei | 199 | ||
5.5.5 Nur Objektcode oder Bibliothek vorhanden | 200 | ||
5.6 Aufgaben | 200 | ||
5.6.1 Level 1 | 200 | ||
5.6.2 Level 2 | 201 | ||
6 Klassen | 204 | ||
6.1 Abstraktionsmechanismus | 204 | ||
6.2 Klassen | 205 | ||
6.2.1 Klassendefinition | 205 | ||
6.2.2 Elementfunktionen definieren | 206 | ||
6.2.3 Zugriffskontrolle mit »public« und »private« | 208 | ||
6.2.4 Zugriff auf die Daten innerhalb einer Klasse | 211 | ||
6.2.5 Objekte erzeugen und benutzen | 211 | ||
6.3 Konstruktoren | 216 | ||
6.3.1 Konstruktoren deklarieren | 217 | ||
6.3.2 Konstruktoren definieren | 218 | ||
6.3.3 Standardkonstruktor (Default-Konstruktor) | 220 | ||
6.3.4 Kopierkonstruktor | 221 | ||
6.4 Destruktoren | 222 | ||
6.4.1 Destruktor deklarieren | 222 | ||
6.4.2 Destruktor definieren | 223 | ||
6.5 Elementfunktionen | 225 | ||
6.5.1 Inline-Elementfunktionen | 225 | ||
6.5.2 Konstante Elementfunktionen (read-only) | 228 | ||
6.5.3 this-Zeiger | 230 | ||
6.6 Aufgaben | 231 | ||
6.6.1 Level 1 | 231 | ||
6.6.2 Level 2 | 232 | ||
6.6.3 Level 3 | 233 | ||
7 Objekte und Klassenelemente | 234 | ||
7.1 Konstante Objekte | 234 | ||
7.2 Objekte als (Element-)Funktionsargumente | 235 | ||
7.2.1 Hilfsfunktionen | 235 | ||
7.2.2 Wertübergabe als Kopie (Call-by-Value) | 236 | ||
7.2.3 Wertübergabe als Zeiger (Call-by-Reference) | 238 | ||
7.2.4 Wertübergabe als Referenz | 240 | ||
7.2.5 Wertübergabe bei Elementfunktionen | 240 | ||
7.2.6 *this-Zeiger | 243 | ||
7.3 Objekte als Rückgabewerte | 245 | ||
7.4 Arrays von Objekten | 247 | ||
7.5 Dynamische Objekte | 248 | ||
7.6 Mehr zu den Klassenelementen | 251 | ||
7.6.1 Dynamische Klassenelemente | 251 | ||
7.6.2 Statische Klassenelemente | 258 | ||
7.7 Andere Klassenobjekte als Datenelement einer Klasse | 261 | ||
7.8 Gute Freunde (»friend«) | 268 | ||
7.9 Aufgaben | 271 | ||
7.9.1 Level 1 | 271 | ||
7.9.2 Level 2 | 271 | ||
7.9.3 Level 3 | 273 | ||
8 Operatoren überladen | 274 | ||
8.1 Schlüsselwort »operator« | 275 | ||
8.2 Zweistellige (arithmetische) Operatoren überladen | 277 | ||
8.2.1 Operatorüberladung als Elementfunktion einer Klasse | 278 | ||
8.2.2 Operatorüberladung als globale Hilfsfunktion | 281 | ||
8.2.3 Zweistellige Operatoren zusammengefasst | 283 | ||
8.3 Einstellige Operatoren überladen | 283 | ||
8.4 Zuweisungsoperator überladen | 286 | ||
8.5 Ein-/Ausgabeoperator überladen | 289 | ||
8.5.1 Eingabeoperator >> überladen | 289 | ||
8.5.2 Ausgabeoperator << überladen | 290 | ||
8.6 Weitere Operatorüberladungen | 292 | ||
8.7 Konvertierungsoperatoren | 293 | ||
8.7.1 Konvertierungskonstruktor | 293 | ||
8.7.2 Globale Konvertierungsfunktion | 295 | ||
8.8 Aufgaben zu Kapitel 8 | 297 | ||
8.8.1 Level 1 | 297 | ||
8.8.2 Level 2 | 297 | ||
8.8.3 Level 3 | 298 | ||
9 Vererbung (Abgeleitete Klassen) | 300 | ||
9.1 Die Vorbereitung | 301 | ||
9.2 Die Ableitung einer Klasse | 302 | ||
9.2.1 »public«-Zugriffsrechte einer abgeleiteten Klasse | 304 | ||
9.2.2 Erben und erweitern | 304 | ||
9.2.3 Zugriff auf die Daten | 305 | ||
9.2.4 Redefinition von Elementfunktionen | 307 | ||
9.2.5 Konstruktoren | 308 | ||
9.2.6 Destruktor | 309 | ||
9.2.7 Programmbeispiel | 310 | ||
9.2.8 Zugriffsrecht »protected« | 310 | ||
9.2.9 Zugriffsrechte bei der Vererbung von Klassen | 312 | ||
9.2.10 Implizite Typumwandlung abgeleiteter Klassen | 314 | ||
9.3 Mehrfachvererbung | 315 | ||
9.4 Virtuelle Vererbung | 319 | ||
9.5 Aufgaben für Kapitel 9 | 324 | ||
9.5.1 Level 1 | 324 | ||
9.5.2 Level 2 | 324 | ||
9.5.3 Level 3 | 325 | ||
10 Abstrakte Klassen | 326 | ||
10.1 Abstrakte Klasse erstellen | 326 | ||
10.2 Vorteil von abstrakten Klassen | 330 | ||
10.3 Virtuelle Destruktoren | 330 | ||
10.4 typeinfo | 332 | ||
10.5 Aufgaben für Kapitel 10 | 333 | ||
10.5.1 Level 1 | 333 | ||
10.5.2 Level 2 | 333 | ||
10.5.3 Level 3 | 335 | ||
11 Templates | 336 | ||
11.1 Funktions-Templates | 336 | ||
11.1.1 Funktions-Template definieren | 337 | ||
11.1.2 Typübereinstimmung | 339 | ||
11.1.3 Funktions-Templates über mehrere Module | 339 | ||
11.1.4 Funktions-Template spezialisieren | 340 | ||
11.1.5 Templates mit verschiedenen Parametern | 341 | ||
11.1.6 Explizite Template-Argumente | 343 | ||
11.2 Klassen-Templates | 344 | ||
11.2.1 Klassen-Template definieren | 344 | ||
11.2.2 Elementfunktionen von Klassen-Templates definieren | 345 | ||
11.2.3 Klassen-Template instantiieren | 349 | ||
11.3 STL (Standard Template Library) | 352 | ||
11.3.1 Container von STL | 352 | ||
11.3.2 Iteratoren | 356 | ||
11.3.3 Algorithmen | 356 | ||
11.4 Aufgaben für Kapitel 11 | 357 | ||
11.4.1 Level 1 | 357 | ||
11.4.2 Level 2 | 358 | ||
11.4.3 Level 3 | 359 | ||
12 Exception-Handling (Fehlerbehandlung) | 360 | ||
12.1 Exception auslösen | 361 | ||
12.2 Exception auffangen und behandeln | 361 | ||
12.2.1 »terminate«-Handler einrichten | 365 | ||
12.2.2 Alternatives »catch (...)« | 366 | ||
12.2.3 Stack-Abwicklung | 366 | ||
12.3 Ausnahme-Klassen (Fehlerklassen) | 367 | ||
12.4 Standard-Exceptions | 369 | ||
12.4.1 Virtuelle Methode »what()« | 370 | ||
12.4.2 Anwenden der Standard-Exceptions | 370 | ||
12.5 System-Exceptions | 374 | ||
12.5.1 bad_alloc | 374 | ||
12.5.2 bad_cast | 374 | ||
12.5.3 bad_typeid | 374 | ||
12.5.4 bad_exception | 375 | ||
12.6 Aufgaben für Kapitel 12 | 375 | ||
12.6.1 Level 1 | 375 | ||
A Lösungen der Übungsaufgaben | 376 | ||
A. 1 Lösungen zum Kapitel 2 | 376 | ||
A.1.1 Lösungen Level 1 | 376 | ||
A.1.2 Lösungen Level 2 | 376 | ||
A.1.3 Lösung Level 3 | 377 | ||
A. 2 Lösungen zum Kapitel 3 | 378 | ||
A.2.1 Lösungen Level 1 | 378 | ||
A.2.2 Lösungen Level 2 | 379 | ||
A.2.3 Lösungen Level 3 | 380 | ||
A. 3 Lösungen zum Kapitel 4 | 381 | ||
A.3.1 Lösungen Level 1 | 381 | ||
A.3.2 Lösungen Level 2 | 383 | ||
A.3.3 Lösungen Level 3 | 384 | ||
A. 4 Lösungen zum Kapitel 5 | 385 | ||
A.4.1 Lösungen Level 1 | 385 | ||
A.4.2 Lösungen Level 2 | 386 | ||
A. 5 Lösungen zum Kapitel 6 | 387 | ||
A.5.1 Lösungen Level 1 | 387 | ||
A.5.2 Lösungen Level 2 | 388 | ||
A.5.3 Lösung Level 3 | 389 | ||
A. 6 Lösungen zum Kapitel 7 | 390 | ||
A.6.1 Lösungen Level 1 | 390 | ||
A.6.2 Lösungen Level 2 | 391 | ||
A.6.3 Lösungen Level 3 | 392 | ||
A. 7 Lösungen zum Kapitel 8 | 395 | ||
A.7.1 Lösungen Level 1 | 395 | ||
A.7.2 Lösung Level 2 | 396 | ||
A.7.3 Lösung Level 3 | 397 | ||
A. 8 Lösungen zum Kapitel 9 | 398 | ||
A.8.1 Lösungen Level 1 | 398 | ||
A.8.2 Lösung Level 2 | 399 | ||
A.8.3 Lösung Level 3 | 400 | ||
A. 9 Lösungen zum Kapitel 10 | 401 | ||
A.9.1 Lösungen Level 1 | 401 | ||
A.9.2 Lösung Level 2 | 402 | ||
A.9.3 Lösung Level 3 | 404 | ||
A. 10 Lösungen zum Kapitel 11 | 404 | ||
A.10.1 Lösungen Level 1 | 404 | ||
A.10.2 Lösungen Level 2 | 405 | ||
A.10.3 Lösung Level 3 | 405 | ||
A. 11 Lösungen zum Kapitel 12 | 407 | ||
A.11.1 Lösungen Level 1 | 407 | ||
Index | 408 |