Inhalt | 6 |
Vorwort | 16 |
1 Einführung in die C++-Programmierung | 18 |
1.1 Compiler-Aufrufe | 18 |
1.1.1 Borland C++ Builder | 18 |
1.1.2 Microsoft Visual C++ | 20 |
1.1.3 Linux | 23 |
1.2 Zusammenfassung | 25 |
2 Einführung | 26 |
2.1 Prozedurale Sprachen | 26 |
2.2 Objektorientierte Sprachen | 27 |
2.3 Hauptelemente objektorientierter Sprachen | 28 |
2.3.1 Objekte | 28 |
2.3.2 Klassen | 29 |
2.3.3 Vererbung | 29 |
2.3.4 Wiederverwendbarkeit | 29 |
2.3.5 Neue Datentypen | 30 |
2.3.6 Polymorphismus | 30 |
2.3.7 Überlagerung | 30 |
2.4 Zusammenfassung | 31 |
3 Grundlagen der Sprache C++ | 32 |
3.1 Der Programmaufbau | 32 |
3.1.1 Präprozessorbefehle | 32 |
3.1.2 Leerzeilen und Zwischenräume | 33 |
3.1.3 Funktionen | 33 |
3.1.4 Anweisungen | 34 |
3.2 Die Ausgabe des Programms | 35 |
3.3 Kommentare | 36 |
3.4 Variablen | 37 |
3.4.1 Ganzzahlige Variablen | 37 |
3.4.2 Gleitkommavariablen | 40 |
3.4.3 Konstanten | 41 |
3.4.4 Zeichenvariablen | 41 |
3.4.5 Übersicht | 42 |
3.4.6 Typumwandlungen | 45 |
3.5 Escape-Sequenzen | 48 |
3.6 Operatoren zur Manipulation der Ausgabe | 49 |
3.7 #define | 51 |
3.8 Die Eingabe | 52 |
3.9 Arithmetische Operatoren | 53 |
3.9.1 Grundoperatoren | 53 |
3.9.2 Restoperator | 54 |
3.9.3 Zuweisungsoperatoren | 55 |
3.9.4 Inkrement- und Dekrementoperator | 55 |
3.10 Bibliotheksfunktionen | 58 |
3.11 Zusammenfassung | 60 |
3.12 Aufgaben | 61 |
4 Entscheidungen | 62 |
4.1 Operatoren für Vergleiche | 62 |
4.2 Die if-Anweisung | 64 |
4.3 Die if..else-Anweisung | 66 |
4.4 Die switch-Anweisung | 70 |
4.5 Der Bedingungsoperator | 72 |
4.6 Logikoperatoren | 73 |
4.6.1 Der logische UND-Operator | 74 |
4.6.2 Der logische ODER-Operator | 75 |
4.6.3 Der logische NICHT-Operator | 75 |
4.6.4 Bewertungsreihenfolge | 77 |
4.7 Zusammenfassung | 78 |
4.8 Aufgaben | 79 |
5 Schleifen | 80 |
5.1 Die for-Schleife | 80 |
5.2 Die while-Schleife | 89 |
5.3 Die do..while-Schleife | 92 |
5.4 Hinweise zum Einsatz der Schleifen | 94 |
5.5 Anweisungen zur Schleifensteuerung | 95 |
5.5.1 Die Anweisung break | 95 |
5.5.2 Die Anweisung continue | 98 |
5.5.3 Die Anweisung goto | 100 |
5.6 Zusammenfassung | 100 |
5.7 Aufgaben | 101 |
6 Strukturen und Aufzählungen | 102 |
6.1 Strukturen | 102 |
6.1.1 Die erste Struktur | 103 |
6.1.2 Die Beschreibung einer Struktur | 104 |
6.1.3 Die Definition der Struktur | 104 |
6.1.4 Der Zugriff auf die Komponenten | 105 |
6.1.5 Weitere Eigenschaften | 106 |
6.1.6 Ein weiteres Beispiel | 110 |
6.1.7 Addition zweier Strukturen | 111 |
6.1.8 Strukturen innerhalb von Strukturen | 112 |
6.1.9 Ausblick | 115 |
6.2 Der Aufzählungstyp | 115 |
6.2.1 Monate | 115 |
6.2.2 Ein boolescher Datentyp | 117 |
6.2.3 Zahlenwert zuweisen | 120 |
6.2.4 Ausgabe | 121 |
6.3 Zusammenfassung | 122 |
6.4 Aufgaben | 123 |
7 Funktionen | 124 |
7.1.1 Das Programm | 124 |
7.1.2 Die Deklaration der Funktion | 125 |
7.1.3 Aufruf der Funktion | 126 |
7.1.4 Die Definition der Funktion | 126 |
7.1.5 Bibliotheksfunktionen | 127 |
7.1.6 Funktionen ohne separate Deklaration | 127 |
7.2 Übergabe von Argumenten | 129 |
7.2.1 Konstanten | 129 |
7.2.2 Variablen | 131 |
7.2.3 Strukturen | 133 |
7.3 Rückgabewerte | 135 |
7.3.1 Das Programm | 136 |
7.3.2 Die Anweisung »return« | 137 |
7.3.3 Strukturen als Rückgabewerte | 139 |
7.4 Referenzen | 141 |
7.4.1 Übergabe einfacher Datentypen | 142 |
7.4.2 Übergabe von Strukturen | 147 |
7.4.3 Weitere Anmerkungen | 148 |
7.5 Überlagerte Funktionen | 150 |
7.5.1 Unterschiedliche Parameteranzahl | 150 |
7.5.2 Unterschiedliche Parametertypen | 152 |
7.6 Inline-Funktionen | 155 |
7.7 Standardargumente | 157 |
7.8 Speicherklassen | 159 |
7.8.1 Automatische Variablen | 159 |
7.8.2 Externe Variablen | 162 |
7.8.3 Statische Variablen | 164 |
7.8.4 Übersicht | 167 |
7.9 Referenzrückgabe | 167 |
7.10 Zusammenfassung | 169 |
7.11 Aufgaben | 170 |
8 Klassen und Objekte | 172 |
8.1 Einführung | 172 |
8.1.1 Das Beispielprogramm | 172 |
8.1.2 Der Aufruf | 173 |
8.1.3 Die Festlegung der Klasse | 174 |
8.1.4 private und public | 175 |
8.1.5 Die Verwendung der Klasse | 176 |
8.2 Komplexere Klassen | 177 |
8.3 Konstruktoren | 179 |
8.4 Destruktoren | 183 |
8.5 Objekte als Funktionsargumente | 183 |
8.5.1 Überlagerte Konstruktoren | 185 |
8.5.2 Komponentenfunktionen außerhalb der Klasse definieren | 186 |
8.5.3 Objekte als Argumente | 187 |
8.6 Objekte als Rückgabewerte | 188 |
8.7 Ein Hütchen-Spiel | 191 |
8.8 Strukturen und Klassen | 194 |
8.9 Speicherplatz | 196 |
8.10 Statische Klassendaten | 196 |
8.11 Hintergründe | 200 |
8.12 Zusammenfassung | 202 |
8.13 Aufgaben | 203 |
9 Vektoren und Arrays | 204 |
9.1 Grundlagen | 204 |
9.1.1 Ein erstes Beispiel | 204 |
9.1.2 Definition des Vektors | 205 |
9.1.3 Die Elemente des Vektors | 205 |
9.1.4 Zugriff auf die Elemente des Vektors | 206 |
9.1.5 Ein weiteres Beispiel | 207 |
9.1.6 Initialisierung von Vektoren | 209 |
9.1.7 Mehrdimensionale Vektoren | 210 |
9.1.8 Übergabe von Vektoren | 215 |
9.1.9 Vektoren aus Strukturen | 217 |
9.2 Vektoren in Klassen | 220 |
9.3 Vektoren aus Objekten | 224 |
9.3.1 Das Beispiel | 224 |
9.4 Zeichenketten | 228 |
9.4.1 Variablen | 228 |
9.4.2 Überlauf verhindern | 229 |
9.4.3 Konstanten | 232 |
9.4.4 Einlesen von Zeichenketten mit Leerzeichen | 232 |
9.4.5 Mehrzeilige Zeichenketten | 234 |
9.4.6 Bestimmung der Länge | 235 |
9.4.7 Kopieren einer Zeichenkette | 236 |
9.4.8 Vektoren aus Zeichenketten | 238 |
9.4.9 Zeichenketten in einer Klasse | 240 |
9.4.10 Eine String-Klasse | 241 |
9.5 Zusammenfassung | 245 |
9.6 Aufgaben | 246 |
10 Überlagerung von Operatoren | 248 |
10.1 Unäre Operatoren | 249 |
10.1.1 Das Beispiel | 249 |
10.1.2 Das Schlüsselwort » operator« | 251 |
10.1.3 Argumente des Operators | 251 |
10.1.4 Rückgabewerte von Operatoren | 252 |
10.1.5 Temporäre Objekte ohne Namen | 254 |
10.1.6 Beschränkungen | 256 |
10.2 Binäre Operatoren | 258 |
10.2.1 Arithmetische Operatoren | 258 |
10.2.2 Verkettung von Zeichenketten | 261 |
10.2.3 Mehrfache Überlagerung | 264 |
10.2.4 Vergleiche | 265 |
10.2.5 Zuweisungsoperatoren | 269 |
10.3 Umwandlung von Daten | 272 |
10.3.1 Interne Datentypen | 273 |
10.3.2 Objekte und interne Datentypen | 274 |
10.3.3 Objekte unterschiedlicher Typen | 287 |
10.4 Weitere Anmerkungen | 295 |
10.4.1 Verwendung entsprechender Bedeutungen | 295 |
10.4.2 Verwendung ähnlicher Syntax | 296 |
10.4.3 Zurückhaltung üben | 296 |
10.4.4 Unklarheiten vermeiden | 297 |
10.4.5 Nicht überlagerbare Operatoren | 297 |
10.5 Zusammenfassung | 298 |
10.6 Aufgaben | 299 |
11 Vererbung | 300 |
11.1 Basisklassen und davon abgeleitete Klassen | 300 |
11.1.1 Das Beispiel | 300 |
11.1.2 Angabe der abgeleiteten Klasse | 302 |
11.1.3 Zugriff auf Komponenten der Basisklasse | 303 |
11.1.4 Die Zugriffsangabe »protected« | 304 |
11.2 Konstruktoren in abgeleiteten Klassen | 305 |
11.3 Komponentenfunktionen überschreiben | 308 |
11.4 Hierarchie von Klassen | 312 |
11.5 Arten der Vererbung | 316 |
11.5.1 Zugriffsmöglichkeiten | 316 |
11.5.2 Klassen und Strukturen | 318 |
11.6 Weitere Vererbung | 319 |
11.7 Mehrfachvererbung | 323 |
11.7.1 Komponentenfunktionen bei mehrfacher Vererbung | 324 |
11.7.2 Konstruktoren | 328 |
11.8 Mehrdeutigkeit bei mehrfacher Vererbung | 334 |
11.9 Klassen in Klassen | 336 |
11.10 Programmentwicklung | 342 |
11.11 Zusammenfassung | 343 |
11.12 Aufgaben | 344 |
12 Zeiger | 346 |
12.1 Adressen und Zeiger | 346 |
12.1.1 Der Adreßoperator »&« | 347 |
12.1.2 Zeigervariablen | 349 |
12.1.3 Zugriff auf die Speicherstelle(n) | 351 |
12.1.4 Zeiger auf void | 353 |
12.2 Vektoren und Zeiger | 354 |
12.3 Funktionen und Zeiger | 357 |
12.3.1 Aufrufe mit einfachen Variablen | 357 |
12.3.2 Vektoren als Aufrufparameter | 359 |
12.3.3 Sortieren von Vektoren | 362 |
12.4 Zeichenketten und Zeiger | 366 |
12.4.1 Zeichenkettenkonstanten | 366 |
12.4.2 Argumente von Funktionen | 368 |
12.4.3 Zeichenketten kopieren | 369 |
12.4.4 Bibliotheksfunktionen für Zeichenketten | 371 |
12.4.5 Vektoren aus Zeigern | 372 |
12.5 Die Speicherverwaltung | 373 |
12.5.1 Der Operator »new« | 374 |
12.5.2 Der Operator »delete« | 375 |
12.5.3 »new« in Objekten | 376 |
12.6 Zeiger auf Objekte | 379 |
12.6.1 Das Beispiel | 379 |
12.6.2 Zugriff auf die Komponenten | 380 |
12.6.3 Weiterer Einsatz von »new« | 381 |
12.6.4 Vektor aus Zeigern auf Objekte | 383 |
12.7 Verkettete Listen | 386 |
12.7.1 Kette aus Zeigern | 386 |
12.7.2 Element hinzufügen | 388 |
12.7.3 Ausgabe der Liste | 390 |
12.7.4 Sich selbst enthaltende Klassen | 391 |
12.7.5 Die Hauptfunktion | 392 |
12.7.6 Erweiterungen | 392 |
12.8 Zeiger auf Zeiger | 393 |
12.8.1 Das Beispielprogramm | 393 |
12.8.2 Die Sortierung | 396 |
12.8.3 Zeiger auf Zeiger | 397 |
12.8.4 Der Vergleich von Zeichenketten | 398 |
12.8.5 Zeiger auf Zeiger auf Zeiger auf... | 398 |
12.9 Fehlerbehebung bei Zeigern | 399 |
12.10 Zusammenfassung | 402 |
12.11 Aufgaben | 403 |
13 Weitere Eigenschaften von C++ | 404 |
13.1 Virtuelle Funktionen | 404 |
13.1.1 Einführung | 404 |
13.1.2 Zugriff auf nicht virtuelle Komponentenfunktionen mit Zeigern | 405 |
13.1.3 Zugriff auf virtuelle Komponentenfunktionen mit Zeigern | 407 |
13.1.4 Späte Bindung | 408 |
13.1.5 Rein virtuelle Funktionen | 409 |
13.1.6 Eine erweiterte Klasse für Personen | 410 |
13.1.7 Abstrakte Klassen | 415 |
13.1.8 Virtuelle Basisklassen | 415 |
13.2 Freundfunktionen | 417 |
13.2.1 ... als Brücken | 417 |
13.2.2 ... zur Überwindung von Grenzen | 419 |
13.2.3 ... zur besseren Lesbarkeit | 424 |
13.3 Freundklassen | 428 |
13.4 Statische Funktionen | 429 |
13.4.1 Das Beispiel | 430 |
13.4.2 Zugriff auf statische Funktionen | 431 |
13.4.3 Kennzeichnung der Objekte | 432 |
13.4.4 Destruktoren | 433 |
13.5 Zuweisung und Initialisierung durch Kopieren | 433 |
13.5.1 Überlagerung des Zuweisungsoperators | 434 |
13.5.2 Der Kopiekonstruktor | 438 |
13.5.3 Erweiterung der Zeichenkettenklasse | 443 |
13.6 Der this-Zeiger | 448 |
13.6.1 Zugriff auf Komponentendaten | 449 |
13.6.2 Rückgabe von Werten | 450 |
13.6.3 Noch eine Erweiterung der Zeichenkettenklasse | 452 |
13.7 Zusammenfassung | 456 |
13.8 Aufgaben | 457 |
14 Datenströme und Dateien | 458 |
14.1 Datenströme | 458 |
14.1.1 Die Klassenhierarchie | 458 |
14.1.2 Klassen für Datenströme | 459 |
14.2 Ein- und Ausgabe von Zeichenketten | 460 |
14.2.1 Schreiben von Zeichenketten | 460 |
14.2.2 Lesen von Zeichenketten | 461 |
14.3 Ein- und Ausgabe von Zeichen | 462 |
14.4 Ein- und Ausgabe von Objekten | 463 |
14.4.1 Schreiben eines Objekts | 463 |
14.4.2 Einlesen eines Objekts | 464 |
14.4.3 Passende Datenstrukturen | 465 |
14.5 Speichern und Lesen mehrerer Objekte | 466 |
14.5.1 Das Beispiel | 466 |
14.5.2 Die Klasse fstream | 468 |
14.6 Dateizeiger | 469 |
14.6.1 Festlegen einer absoluten Position | 470 |
14.6.2 Angabe eines Abstands | 470 |
14.6.3 Bestimmung der aktuellen Position | 472 |
14.7 Komplexere Ein- und Ausgaben | 473 |
14.7.1 Das Beispiel | 473 |
14.7.2 Komponentenfunktionen | 477 |
14.7.3 Dateien schließen | 478 |
14.7.4 Ausblick | 478 |
14.8 Fehlerbearbeitung | 478 |
14.9 Einlese- und Einfügeoperator überladen | 480 |
14.10 Zusammenfassung | 484 |
14.11 Aufgaben | 485 |
15 Weitere Möglichkeiten | 486 |
15.1 Befehlszeilenargumente | 486 |
15.2 Projekte aus mehreren Dateien | 489 |
15.2.1 Klassenbibliotheken | 489 |
15.2.2 Projektorganisation | 490 |
15.2.3 Die #include-Anweisung | 490 |
15.2.4 Mehrere Quelltextdateien | 491 |
15.2.5 Borland C++-Builder | 492 |
15.2.6 Visual C++ 6 | 493 |
15.2.7 Linux | 494 |
15.3 Zusammenfassung | 495 |
15.4 Aufgaben | 495 |
16 Exceptions – Ausnahmebehandlung | 496 |
16.1 try und catch | 497 |
16.2 Auslösen einer Exception mit throw | 497 |
16.3 Ein erstes Beispiel | 498 |
16.4 Exceptions ohne Behandlung | 500 |
16.5 Verschachtelung von Exceptions | 502 |
16.6 Routine zum Beenden des Programms | 504 |
16.7 Einschränkung auslösbarer Exceptions | 506 |
16.8 Exception-Objekte | 508 |
16.9 Initialisierung der Objekte | 510 |
16.10 Mehrere Exceptions behandeln | 514 |
16.11 Alle Exceptions behandeln | 516 |
16.12 Zusammenfassung | 518 |
16.13 Aufgaben | 519 |
A Lösungen | 520 |
A.1 Lösungen zu Kapitel 3 | 520 |
A.2 Lösungen zu Kapitel 4 | 521 |
A.3 Lösungen zu Kapitel 5 | 523 |
A.4 Lösungen zu Kapitel 6 | 525 |
A.5 Lösungen zu Kapitel 7 | 526 |
A.6 Lösungen zu Kapitel 8 | 528 |
A.7 Lösungen zu Kapitel 9 | 532 |
A.8 Lösungen zu Kapitel 10 | 535 |
A.9 Lösungen zu Kapitel 11 | 538 |
A.10 Lösungen zu Kapitel 12 | 543 |
A.11 Lösungen zu Kapitel 13 | 545 |
A.12 Lösungen zu Kapitel 14 | 548 |
A.13 Lösungen zu Kapitel 15 | 551 |
A.14 Lösungen zu Kapitel 16 | 553 |
Stichwortverzeichnis | 556 |