C++
Das umfassende Handbuch. Das Lehr- und Nachschlagewerk zu Modernem C++. Spachgrundlagen, OOP, Standardbibliothek, parallele Programmierung, GUI-Programmierung mit Qt u. v. m. Guidelines und Techniken für
C++
Das umfassende Handbuch. Das Lehr- und Nachschlagewerk zu Modernem C++. Spachgrundlagen, OOP, Standardbibliothek, parallele Programmierung, GUI-Programmierung mit Qt u. v. m. Guidelines und Techniken für
- Gebundenes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
Das Handbuch führt Sie in die moderne C++-Entwicklung ein und zeigt, wie Sie Programme mit höchsten Ansprüchen an Funktionalität, Effizienz und Sicherheit entwickeln. Im ersten Teil lernen Sie alles über den Sprachkern: wie er aufgebaut ist und welche Elemente es gibt. Dieser Teil ist zugleich eine Einführung in C++ für alle, die keine Vorkenntnisse haben. Im zweiten Teil wird ausführlich die objektorientierte Programmierung behandelt. Im Teil über die Standardbibliothek erfahren Sie alles zu den Werkzeugen und Konzepten, die Sie benötigen, um guten C++-Code zu entwickeln. Zum Schluss erhalten…mehr
Aus dem Inhalt:
SprachgrundlagenFehlerbehandlungObjektorientierte ProgrammierungZeigerSchnittstelle zu CTemplatesContainerStandardbibliothekC++ Core GuidelinesGUI-Programmierung mit QtExtra: Tutorials zum Thema "guter Code"
Die Fachpresse zur Vorauflage:
iX - Magazin für professionelle Informationstechnik: »Empfehlung der Redaktion!«
- Produktdetails
- Rheinwerk Computing
- Verlag: Rheinwerk Verlag
- Artikelnr. des Verlages: 459/04360
- Seitenzahl: 1067
- Erscheinungstermin: 27. Dezember 2017
- Deutsch
- Abmessung: 245mm x 175mm x 57mm
- Gewicht: 1892g
- ISBN-13: 9783836243605
- ISBN-10: 3836243601
- Artikelnr.: 49007539
- Herstellerkennzeichnung Die Herstellerinformationen sind derzeit nicht verfügbar.
- Rheinwerk Computing
- Verlag: Rheinwerk Verlag
- Artikelnr. des Verlages: 459/04360
- Seitenzahl: 1067
- Erscheinungstermin: 27. Dezember 2017
- Deutsch
- Abmessung: 245mm x 175mm x 57mm
- Gewicht: 1892g
- ISBN-13: 9783836243605
- ISBN-10: 3836243601
- Artikelnr.: 49007539
- Herstellerkennzeichnung Die Herstellerinformationen sind derzeit nicht verfügbar.
Torsten T. Will, Jahrgang 1970, beschäftigte sich bereits während seines Diploms in Informatik mit Programmiersprachen und ihren Konzepten. C++ hat ihn schon in seinen Anfängen fasziniert und begleitet. Andere Programmierprojekte bewältigte er vor allem in Pascal, Java, Scala und Python. Seit 2004 schreibt er im Fachmagazin c't gelegentlich über C++ und Python. Was dann noch an Zeit übrig bleibt, geht in die Fotografie.
TEIL I Grundlagen ... 27
1. Das C++-Handbuch ... 29
1.1 ... Neu und Modern ... 30
1.2 ... »Dan«-Kapitel ... 30
1.3 ... Darstellung in diesem Buch ... 31
1.4 ... Verwendete Formatierungen ... 31
1.5 ... Sorry for my Denglish ... 32
2. Programmieren in C++ ... 35
2.1 ... Übersetzen ... 36
2.2 ... Übersetzungsphasen ... 36
2.3 ... Aktuelle Compiler ... 38
2.4 ... Entwicklungsumgebungen ... 39
2.5 ... Die Kommandozeile unter Ubuntu ... 40
2.6 ... Die IDE »Microsoft Visual Studio Community« unter Windows ... 44
2.7 ... Das Beispielprogramm beschleunigen ... 46
3. C++ für Umsteiger ... 49
4. Die Grundbausteine von C++ ... 55
4.1 ... Kommentare ... 58
4.2 ... Die »include«-Direktive ... 58
4.3 ... Die Standardbibliothek ... 58
4.4 ... Die Funktion »main()« ... 59
4.5 ... Typen ... 59
4.6 ... Variablen ... 60
4.7 ... Initialisierung ... 60
4.8 ... Ausgabe auf der Konsole ... 61
4.9 ... Anweisungen ... 61
4.10 ... Ohne Eile erklärt ... 62
4.11 ... Operatoren ... 85
4.12 ... Eingebaute Datentypen ... 98
4.13 ... Undefiniertes und unspezifiziertes Verhalten ... 132
5. Guter Code, 1. Dan: Lesbar programmieren ... 135
5.1 ... Kommentare ... 135
5.2 ... Dokumentation ... 136
5.3 ... Einrückungen und Zeilenlänge ... 137
5.4 ... Zeilen pro Funktion und Datei ... 138
5.5 ... Klammern und Leerzeichen ... 139
5.6 ... Namen ... 140
6. Höhere Datentypen ... 143
6.1 ... Strings und Streams ... 144
6.2 ... Der Zeichenkettentyp »string« ... 144
6.3 ... Streams ... 148
6.4 ... Behälter und Zeiger ... 155
6.5 ... Die einfachen Sequenzcontainer ... 156
6.6 ... Algorithmen ... 161
6.7 ... Zeiger und C-Arrays ... 161
7. Funktionen ... 163
7.1 ... Deklaration und Definition einer Funktion ... 164
7.2 ... Funktionstyp ... 165
7.3 ... Funktionen verwenden ... 165
7.4 ... Eine Funktion definieren ... 167
7.5 ... Mehr zu Parametern ... 168
7.6 ... Funktionskörper ... 172
7.7 ... Parameter umwandeln ... 173
7.8 ... Funktionen überladen ... 175
7.9 ... Default-Parameter ... 177
7.10 ... Beliebig viele Argumente ... 179
7.11 ... Alternative Schreibweise zur Funktionsdeklaration ... 179
7.12 ... Spezialitäten ... 180
8. Anweisungen im Detail ... 185
8.1 ... Der Anweisungsblock ... 188
8.2 ... Die leere Anweisung ... 190
8.3 ... Deklarationsanweisung ... 191
8.4 ... Die Ausdrucksanweisung ... 192
8.5 ... Die »if«-Anweisung ... 193
8.6 ... Die »while«-Schleife ... 195
8.7 ... Die »do-while«-Schleife ... 197
8.8 ... Die »for«-Schleife ... 198
8.9 ... Die bereichsbasierte »for«-Schleife ... 200
8.10 ... Die »switch«-Verzweigung ... 202
8.11 ... Die »break«-Anweisung ... 206
8.12 ... Die »continue«-Anweisung ... 207
8.13 ... Die »return«-Anweisung ... 207
8.14 ... Die »goto«-Anweisung ... 209
8.15 ... Der »try-catch«-Block und »throw« ... 210
8.16 ... Zusammenfassung ... 212
9. Ausdrücke im Detail ... 213
9.1 ... Berechnungen und Seiteneffekte ... 214
9.2 ... Arten von Ausdrücken ... 215
9.3 ... Literale ... 216
9.4 ... Bezeichner ... 216
9.5 ... Klammern ... 217
9.6 ... Funktionsaufruf und Index-Zugriff ... 218
9.7 ... Zuweisung ... 218
9.8 ... Typumwandlung ... 220
10. Fehlerbehandlung ... 221
10.1 ... Fehlerbehandlung mit Fehlercodes ... 223
10.2 ... Was ist eine Ausnahme? ... 226
10.3 ... Kleinere Fehlerbehandlungen ... 229
10.4 ... Weiterwerfen -- »rethrow« ... 229
10.5 ... Die Reihenfolge im »catch« ... 230
10.6 ... Typen für Exceptions ... 232
10.7 ... Wenn eine Exception aus »main« herausfällt ... 233
11. Guter Code, 2. Dan: Modularisierung ... 235
11.1 ... Programm, Bibliothek, Objektdatei ... 235
11.2 ... Bausteine ... 236
11.3 ... Trennen der Funktionalitäten ... 237
11.4 ... Ein modulares Beispielprojekt ... 238
11.5 ... Spezialthema: Unity-Builds ... 249
TEIL II Objektorientierte Programmierung und mehr ... 251
12. Von der Struktur zur Klasse ... 253
12.1 ... Initialisierung ... 255
12.2 ... Rückgabe eigener Typen ... 256
12.3 ... Methoden statt Funktionen ... 257
12.4 ... Das bessere »drucke« ... 260
12.5 ... Eine Ausgabe wie jede andere ... 262
12.6 ... Methoden inline definieren ... 263
12.7 ... Implementierung und Definition trennen ... 264
12.8 ... Initialisierung per Konstruktor ... 265
12.9 ... Struktur oder Klasse? ... 271
12.10 ... Zwischenergebnis ... 275
12.11 ... Verwendung eigener Datentypen ... 276
12.12 ... Typinferenz mit »auto« ... 291
12.13 ... Eigene Klassen in Standardcontainern ... 294
13. Namensräume und Qualifizierer ... 297
13.1 ... Der Namensraum »std« ... 297
13.2 ... Anonymer Namensraum ... 301
13.3 ... »static« macht lokal ... 303
13.4 ... »static« teilt gern ... 303
13.5 ... »static« macht dauerhaft ... 306
13.6 ... Zusammenfassung ... 309
13.7 ... Const ... 310
13.8 ... Flüchtig mit »volatile« ... 324
14. Guter Code, 3. Dan: Testen ... 327
14.1 ... Arten des Tests ... 327
14.2 ... Frameworks ... 335
14.3 ... Boost.Test ... 339
14.4 ... Hilfsmakros für Assertions ... 343
14.5 ... Ein Beispielprojekt mit Unittests ... 346
15. Vererbung ... 359
15.1 ... Beziehungen ... 360
15.2 ... Vererbung in C++ ... 362
15.3 ... Hat-ein versus ist-ein ... 363
15.4 ... Gemeinsamkeiten finden ... 364
15.5 ... Abgeleitete Typen erweitern ... 366
15.6 ... Methoden überschreiben ... 367
15.7 ... Wie Methoden funktionieren ... 368
15.8 ... Virtuelle Methoden ... 370
15.9 ... Konstruktoren in Klassenhierarchien ... 372
15.10 ... Typumwandlung in Klassenhierarchien ... 373
15.11 ... Wann virtuell? ... 375
15.12 ... Andere Designs zur Erweiterbarkeit ... 376
16. Der Lebenszyklus von Klassen ... 379
16.1 ... Erzeugung und Zerstörung ... 380
16.2 ... Temporary: kurzlebige Werte ... 382
16.3 ... Der Destruktor zum Konstruktor ... 383
16.4 ... Yoda-Bedingung ... 387
16.5 ... Konstruktion, Destruktion und Exceptions ... 389
16.6 ... Kopieren ... 390
16.7 ... Zuweisungsoperator ... 393
16.8 ... Streichen von Methoden ... 396
16.9 ... Verschiebeoperationen ... 398
16.10 ... Operatoren ... 403
16.11 ... Eigene Operatoren in einem Datentyp ... 406
16.12 ... Besondere Klassenformen ... 411
17. Guter Code, 4. Dan: Sicherheit, Qualität und Nachhaltigkeit ... 415
17.1 ... Die Nuller-Regel ... 415
17.2 ... RAII -- Resource Acquisition Is Initialization ... 420
18. Spezielles für Klassen ... 429
18.1 ... Darf alles sehen -- »friend«-Klassen ... 429
18.2 ... non-public-Vererbung ... 434
18.3 ... Signatur-Klassen als Interfaces ... 439
18.4 ... Multiple Vererbung ... 443
18.5 ... Rautenförmige multiple Vererbung -- »virtual« für Klassenhierarchien ... 452
18.6 ... Literale Datentypen -- »constexpr« für Konstruktoren ... 456
19. Guter Code, 5. Dan: Klassisches objektorientiertes Design ... 459
19.1 ... Objekte in C++ ... 461
19.2 ... Objektorientiert designen ... 462
TEIL III Fortgeschrittene Themen ... 481
20. Zeiger ... 483
20.1 ... Adressen ... 484
20.2 ... Zeiger ... 485
20.3 ... Gefahren von Aliasing ... 487
20.4 ... Heapspeicher und Stapelspeicher ... 489
20.5 ... Smarte Pointer ... 492
20.6 ... Rohe Zeiger ... 501
20.7 ... C-Arrays ... 506
20.8 ... Iteratoren ... 511
20.9 ... Zeiger als Iteratoren ... 513
20.10 ... Zeiger im Container ... 513
20.11 ... Die Ausnahme: wann das Wegräumen nicht nötig ist ... 514
21. Makros ... 517
21.1 ... Der Präprozessor ... 518
21.2 ... Vorsicht vor fehlenden Klammern ... 521
21.3 ... Vorsicht vor Mehrfachausführung ... 522
21.4 ... Typvariabilität von Makros ... 523
21.5 ... Zusammenfassung ... 526
22. Schnittstelle zu C ... 527
22.1 ... Mit Bibliotheken arbeiten ... 528
22.2 ... C-Header ... 529
22.3 ... C-Ressourcen ... 532
22.4 ... »void«-Pointer ... 532
22.5 ... Daten lesen ... 533
22.6 ... Das Hauptprogramm ... 534
22.7 ... Zusammenfassung ... 535
23. Templates ... 537
23.1 ... Funktionstemplates ... 538
23.2 ... Funktionstemplates in der Standardbibliothek ... 547
23.3 ... Eine Klasse als Funktion ... 551
23.4 ... Templateklassen ... 565
23.5 ... Templates mit variabler Argumentanzahl ... 576
23.6 ... Eigene Literale ... 580
TEIL IV Die Standardbibliothek ... 591
24. Container ... 593
24.1 ... Grundlagen ... 594
24.2 ... Iteratoren-Grundlagen ... 601
24.3 ... Allokatoren: Speicherfragen ... 605
24.4 ... Container-Gemeinsamkeiten ... 607
24.5 ... Ein Überblick über die Standardcontainer-Klassen ... 608
24.6 ... Die sequenziellen Containerklassen ... 612
24.7 ... Assoziativ und geordnet ... 647
24.8 ... Nur assoziativ und nicht garantiert ... 678
24.9 ... Container-Adapter ... 706
24.10 ... Sonderfälle: »string«, »basic string« und »vector« ... 707
24.11 ... Sonderfälle: »vector«, »array« und »bitset« ... 708
24.12 ... Sonderfall: Value-Array mit »valarray<>« ... 711
25. Container-Unterstützung ... 721
25.1 ... Algorithmen ... 721
25.2 ... Iteratoren ... 723
25.3 ... Iterator-Adapter ... 723
25.4 ... Algorithmen der Standardbibliothek ... 724
25.5 ... Liste der Algorithmusfunktionen ... 726
25.6 ... Kopie statt Zuweisung -- Werte in uninitialisierten Speicherbereichen ... 740
25.7 ... Eigene Algorithmen ... 741
26. Guter Code, 6. Dan: Für jede Aufgabe der richtige Container ... 745
26.1 ... Alle Container nach Aspekten sortiert ... 745
26.2 ... Rezepte für Container ... 750
26.3 ... Iteratoren sind mehr als nur Zeiger ... 756
26.4 ... Algorithmen je nach Container unterschiedlich implementieren ... 758
27. Streams ... 761
27.1 ... Ein- und Ausgabekonzept ... 761
27.2 ... Globale, vordefinierte Standardstreams ... 762
27.3 ... Methoden für die Aus- und Eingabe von Streams ... 764
27.4 ... Fehlerbehandlung und Zustand von Streams ... 768
27.5 ... Streams manipulieren und formatieren ... 771
27.6 ... Streams für die Dateiein- und Dateiausgabe ... 782
27.7 ... Streams für Strings ... 796
27.8 ... Streampuffer ... 801
28. Standardbibliothek -- Extras ... 805
28.1 ... »pair« und »tuple« ... 805
28.2 ... Reguläre Ausdrücke ... 812
28.3 ... Zufall ... 821
28.4 ... Mathematisches ... 830
28.5 ... Systemfehlerbehandlung mit »system error« ... 849
28.6 ... Laufzeit-Typinformationen -- »« und »« ... 858
28.7 ... Hilfsklassen rund um Funktoren -- »« ... 862
28.8 ... Ausblick auf C++17 ... 869
29. Threads -- Programmieren mit Mehrläufigkeit ... 875
29.1 ... C++-Threading-Grundlagen ... 876
29.2 ... Gemeinsame Daten ... 891
29.3 ... Andere Möglichkeiten zur Synchronisation ... 904
29.4 ... Im eigenen Speicher mit »thread local« ... 908
29.5 ... Mit »condition variable« auf Ereignisse warten ... 909
29.6 ... Einmal warten mit »future« ... 914
29.7 ... Atomics ... 924
29.8 ... Zusammenfassung ... 930
29.9 ... Ausblick auf C++17 ... 932
TEIL V Über den Standard hinaus ... 933
30. Guter Code, 7. Dan: Richtlinien ... 935
30.1 ... Guideline Support Library ... 936
30.2 ... C++ Core Guidelines ... 937
31. GUI-Programmierung mit Qt ... 951
31.1 ... Ein erstes Miniprogramm ... 955
31.2 ... Objektbäume und Besitz ... 966
31.3 ... Signale und Slots ... 967
31.4 ... Klassenhierarchie von Qt ... 987
31.5 ... Eigene Widgets mit dem Qt Designer erstellen ... 990
31.6 ... Widgets anordnen ... 996
31.7 ... Dialoge erstellen mit »QDialog« ... 1000
31.8 ... Vorgefertigte Dialoge von Qt ... 1008
31.9 ... Eigenen Dialog mit dem Qt Designer erstellen ... 1015
31.10 ... Grafische Bedienelemente von Qt (Qt-Widgets) ... 1031
31.11 ... Anwendungen in einem Hauptfenster ... 1037
31.12 ... Zusammenfassung ... 1048
Cheat Sheet ... 1052
Index ... 1055
TEIL I Grundlagen ... 27
1. Das C++-Handbuch ... 29
1.1 ... Neu und Modern ... 30
1.2 ... »Dan«-Kapitel ... 30
1.3 ... Darstellung in diesem Buch ... 31
1.4 ... Verwendete Formatierungen ... 31
1.5 ... Sorry for my Denglish ... 32
2. Programmieren in C++ ... 35
2.1 ... Übersetzen ... 36
2.2 ... Übersetzungsphasen ... 36
2.3 ... Aktuelle Compiler ... 38
2.4 ... Entwicklungsumgebungen ... 39
2.5 ... Die Kommandozeile unter Ubuntu ... 40
2.6 ... Die IDE »Microsoft Visual Studio Community« unter Windows ... 44
2.7 ... Das Beispielprogramm beschleunigen ... 46
3. C++ für Umsteiger ... 49
4. Die Grundbausteine von C++ ... 55
4.1 ... Kommentare ... 58
4.2 ... Die »include«-Direktive ... 58
4.3 ... Die Standardbibliothek ... 58
4.4 ... Die Funktion »main()« ... 59
4.5 ... Typen ... 59
4.6 ... Variablen ... 60
4.7 ... Initialisierung ... 60
4.8 ... Ausgabe auf der Konsole ... 61
4.9 ... Anweisungen ... 61
4.10 ... Ohne Eile erklärt ... 62
4.11 ... Operatoren ... 85
4.12 ... Eingebaute Datentypen ... 98
4.13 ... Undefiniertes und unspezifiziertes Verhalten ... 132
5. Guter Code, 1. Dan: Lesbar programmieren ... 135
5.1 ... Kommentare ... 135
5.2 ... Dokumentation ... 136
5.3 ... Einrückungen und Zeilenlänge ... 137
5.4 ... Zeilen pro Funktion und Datei ... 138
5.5 ... Klammern und Leerzeichen ... 139
5.6 ... Namen ... 140
6. Höhere Datentypen ... 143
6.1 ... Strings und Streams ... 144
6.2 ... Der Zeichenkettentyp »string« ... 144
6.3 ... Streams ... 148
6.4 ... Behälter und Zeiger ... 155
6.5 ... Die einfachen Sequenzcontainer ... 156
6.6 ... Algorithmen ... 161
6.7 ... Zeiger und C-Arrays ... 161
7. Funktionen ... 163
7.1 ... Deklaration und Definition einer Funktion ... 164
7.2 ... Funktionstyp ... 165
7.3 ... Funktionen verwenden ... 165
7.4 ... Eine Funktion definieren ... 167
7.5 ... Mehr zu Parametern ... 168
7.6 ... Funktionskörper ... 172
7.7 ... Parameter umwandeln ... 173
7.8 ... Funktionen überladen ... 175
7.9 ... Default-Parameter ... 177
7.10 ... Beliebig viele Argumente ... 179
7.11 ... Alternative Schreibweise zur Funktionsdeklaration ... 179
7.12 ... Spezialitäten ... 180
8. Anweisungen im Detail ... 185
8.1 ... Der Anweisungsblock ... 188
8.2 ... Die leere Anweisung ... 190
8.3 ... Deklarationsanweisung ... 191
8.4 ... Die Ausdrucksanweisung ... 192
8.5 ... Die »if«-Anweisung ... 193
8.6 ... Die »while«-Schleife ... 195
8.7 ... Die »do-while«-Schleife ... 197
8.8 ... Die »for«-Schleife ... 198
8.9 ... Die bereichsbasierte »for«-Schleife ... 200
8.10 ... Die »switch«-Verzweigung ... 202
8.11 ... Die »break«-Anweisung ... 206
8.12 ... Die »continue«-Anweisung ... 207
8.13 ... Die »return«-Anweisung ... 207
8.14 ... Die »goto«-Anweisung ... 209
8.15 ... Der »try-catch«-Block und »throw« ... 210
8.16 ... Zusammenfassung ... 212
9. Ausdrücke im Detail ... 213
9.1 ... Berechnungen und Seiteneffekte ... 214
9.2 ... Arten von Ausdrücken ... 215
9.3 ... Literale ... 216
9.4 ... Bezeichner ... 216
9.5 ... Klammern ... 217
9.6 ... Funktionsaufruf und Index-Zugriff ... 218
9.7 ... Zuweisung ... 218
9.8 ... Typumwandlung ... 220
10. Fehlerbehandlung ... 221
10.1 ... Fehlerbehandlung mit Fehlercodes ... 223
10.2 ... Was ist eine Ausnahme? ... 226
10.3 ... Kleinere Fehlerbehandlungen ... 229
10.4 ... Weiterwerfen -- »rethrow« ... 229
10.5 ... Die Reihenfolge im »catch« ... 230
10.6 ... Typen für Exceptions ... 232
10.7 ... Wenn eine Exception aus »main« herausfällt ... 233
11. Guter Code, 2. Dan: Modularisierung ... 235
11.1 ... Programm, Bibliothek, Objektdatei ... 235
11.2 ... Bausteine ... 236
11.3 ... Trennen der Funktionalitäten ... 237
11.4 ... Ein modulares Beispielprojekt ... 238
11.5 ... Spezialthema: Unity-Builds ... 249
TEIL II Objektorientierte Programmierung und mehr ... 251
12. Von der Struktur zur Klasse ... 253
12.1 ... Initialisierung ... 255
12.2 ... Rückgabe eigener Typen ... 256
12.3 ... Methoden statt Funktionen ... 257
12.4 ... Das bessere »drucke« ... 260
12.5 ... Eine Ausgabe wie jede andere ... 262
12.6 ... Methoden inline definieren ... 263
12.7 ... Implementierung und Definition trennen ... 264
12.8 ... Initialisierung per Konstruktor ... 265
12.9 ... Struktur oder Klasse? ... 271
12.10 ... Zwischenergebnis ... 275
12.11 ... Verwendung eigener Datentypen ... 276
12.12 ... Typinferenz mit »auto« ... 291
12.13 ... Eigene Klassen in Standardcontainern ... 294
13. Namensräume und Qualifizierer ... 297
13.1 ... Der Namensraum »std« ... 297
13.2 ... Anonymer Namensraum ... 301
13.3 ... »static« macht lokal ... 303
13.4 ... »static« teilt gern ... 303
13.5 ... »static« macht dauerhaft ... 306
13.6 ... Zusammenfassung ... 309
13.7 ... Const ... 310
13.8 ... Flüchtig mit »volatile« ... 324
14. Guter Code, 3. Dan: Testen ... 327
14.1 ... Arten des Tests ... 327
14.2 ... Frameworks ... 335
14.3 ... Boost.Test ... 339
14.4 ... Hilfsmakros für Assertions ... 343
14.5 ... Ein Beispielprojekt mit Unittests ... 346
15. Vererbung ... 359
15.1 ... Beziehungen ... 360
15.2 ... Vererbung in C++ ... 362
15.3 ... Hat-ein versus ist-ein ... 363
15.4 ... Gemeinsamkeiten finden ... 364
15.5 ... Abgeleitete Typen erweitern ... 366
15.6 ... Methoden überschreiben ... 367
15.7 ... Wie Methoden funktionieren ... 368
15.8 ... Virtuelle Methoden ... 370
15.9 ... Konstruktoren in Klassenhierarchien ... 372
15.10 ... Typumwandlung in Klassenhierarchien ... 373
15.11 ... Wann virtuell? ... 375
15.12 ... Andere Designs zur Erweiterbarkeit ... 376
16. Der Lebenszyklus von Klassen ... 379
16.1 ... Erzeugung und Zerstörung ... 380
16.2 ... Temporary: kurzlebige Werte ... 382
16.3 ... Der Destruktor zum Konstruktor ... 383
16.4 ... Yoda-Bedingung ... 387
16.5 ... Konstruktion, Destruktion und Exceptions ... 389
16.6 ... Kopieren ... 390
16.7 ... Zuweisungsoperator ... 393
16.8 ... Streichen von Methoden ... 396
16.9 ... Verschiebeoperationen ... 398
16.10 ... Operatoren ... 403
16.11 ... Eigene Operatoren in einem Datentyp ... 406
16.12 ... Besondere Klassenformen ... 411
17. Guter Code, 4. Dan: Sicherheit, Qualität und Nachhaltigkeit ... 415
17.1 ... Die Nuller-Regel ... 415
17.2 ... RAII -- Resource Acquisition Is Initialization ... 420
18. Spezielles für Klassen ... 429
18.1 ... Darf alles sehen -- »friend«-Klassen ... 429
18.2 ... non-public-Vererbung ... 434
18.3 ... Signatur-Klassen als Interfaces ... 439
18.4 ... Multiple Vererbung ... 443
18.5 ... Rautenförmige multiple Vererbung -- »virtual« für Klassenhierarchien ... 452
18.6 ... Literale Datentypen -- »constexpr« für Konstruktoren ... 456
19. Guter Code, 5. Dan: Klassisches objektorientiertes Design ... 459
19.1 ... Objekte in C++ ... 461
19.2 ... Objektorientiert designen ... 462
TEIL III Fortgeschrittene Themen ... 481
20. Zeiger ... 483
20.1 ... Adressen ... 484
20.2 ... Zeiger ... 485
20.3 ... Gefahren von Aliasing ... 487
20.4 ... Heapspeicher und Stapelspeicher ... 489
20.5 ... Smarte Pointer ... 492
20.6 ... Rohe Zeiger ... 501
20.7 ... C-Arrays ... 506
20.8 ... Iteratoren ... 511
20.9 ... Zeiger als Iteratoren ... 513
20.10 ... Zeiger im Container ... 513
20.11 ... Die Ausnahme: wann das Wegräumen nicht nötig ist ... 514
21. Makros ... 517
21.1 ... Der Präprozessor ... 518
21.2 ... Vorsicht vor fehlenden Klammern ... 521
21.3 ... Vorsicht vor Mehrfachausführung ... 522
21.4 ... Typvariabilität von Makros ... 523
21.5 ... Zusammenfassung ... 526
22. Schnittstelle zu C ... 527
22.1 ... Mit Bibliotheken arbeiten ... 528
22.2 ... C-Header ... 529
22.3 ... C-Ressourcen ... 532
22.4 ... »void«-Pointer ... 532
22.5 ... Daten lesen ... 533
22.6 ... Das Hauptprogramm ... 534
22.7 ... Zusammenfassung ... 535
23. Templates ... 537
23.1 ... Funktionstemplates ... 538
23.2 ... Funktionstemplates in der Standardbibliothek ... 547
23.3 ... Eine Klasse als Funktion ... 551
23.4 ... Templateklassen ... 565
23.5 ... Templates mit variabler Argumentanzahl ... 576
23.6 ... Eigene Literale ... 580
TEIL IV Die Standardbibliothek ... 591
24. Container ... 593
24.1 ... Grundlagen ... 594
24.2 ... Iteratoren-Grundlagen ... 601
24.3 ... Allokatoren: Speicherfragen ... 605
24.4 ... Container-Gemeinsamkeiten ... 607
24.5 ... Ein Überblick über die Standardcontainer-Klassen ... 608
24.6 ... Die sequenziellen Containerklassen ... 612
24.7 ... Assoziativ und geordnet ... 647
24.8 ... Nur assoziativ und nicht garantiert ... 678
24.9 ... Container-Adapter ... 706
24.10 ... Sonderfälle: »string«, »basic string« und »vector« ... 707
24.11 ... Sonderfälle: »vector«, »array« und »bitset« ... 708
24.12 ... Sonderfall: Value-Array mit »valarray<>« ... 711
25. Container-Unterstützung ... 721
25.1 ... Algorithmen ... 721
25.2 ... Iteratoren ... 723
25.3 ... Iterator-Adapter ... 723
25.4 ... Algorithmen der Standardbibliothek ... 724
25.5 ... Liste der Algorithmusfunktionen ... 726
25.6 ... Kopie statt Zuweisung -- Werte in uninitialisierten Speicherbereichen ... 740
25.7 ... Eigene Algorithmen ... 741
26. Guter Code, 6. Dan: Für jede Aufgabe der richtige Container ... 745
26.1 ... Alle Container nach Aspekten sortiert ... 745
26.2 ... Rezepte für Container ... 750
26.3 ... Iteratoren sind mehr als nur Zeiger ... 756
26.4 ... Algorithmen je nach Container unterschiedlich implementieren ... 758
27. Streams ... 761
27.1 ... Ein- und Ausgabekonzept ... 761
27.2 ... Globale, vordefinierte Standardstreams ... 762
27.3 ... Methoden für die Aus- und Eingabe von Streams ... 764
27.4 ... Fehlerbehandlung und Zustand von Streams ... 768
27.5 ... Streams manipulieren und formatieren ... 771
27.6 ... Streams für die Dateiein- und Dateiausgabe ... 782
27.7 ... Streams für Strings ... 796
27.8 ... Streampuffer ... 801
28. Standardbibliothek -- Extras ... 805
28.1 ... »pair« und »tuple« ... 805
28.2 ... Reguläre Ausdrücke ... 812
28.3 ... Zufall ... 821
28.4 ... Mathematisches ... 830
28.5 ... Systemfehlerbehandlung mit »system error« ... 849
28.6 ... Laufzeit-Typinformationen -- »« und »« ... 858
28.7 ... Hilfsklassen rund um Funktoren -- »« ... 862
28.8 ... Ausblick auf C++17 ... 869
29. Threads -- Programmieren mit Mehrläufigkeit ... 875
29.1 ... C++-Threading-Grundlagen ... 876
29.2 ... Gemeinsame Daten ... 891
29.3 ... Andere Möglichkeiten zur Synchronisation ... 904
29.4 ... Im eigenen Speicher mit »thread local« ... 908
29.5 ... Mit »condition variable« auf Ereignisse warten ... 909
29.6 ... Einmal warten mit »future« ... 914
29.7 ... Atomics ... 924
29.8 ... Zusammenfassung ... 930
29.9 ... Ausblick auf C++17 ... 932
TEIL V Über den Standard hinaus ... 933
30. Guter Code, 7. Dan: Richtlinien ... 935
30.1 ... Guideline Support Library ... 936
30.2 ... C++ Core Guidelines ... 937
31. GUI-Programmierung mit Qt ... 951
31.1 ... Ein erstes Miniprogramm ... 955
31.2 ... Objektbäume und Besitz ... 966
31.3 ... Signale und Slots ... 967
31.4 ... Klassenhierarchie von Qt ... 987
31.5 ... Eigene Widgets mit dem Qt Designer erstellen ... 990
31.6 ... Widgets anordnen ... 996
31.7 ... Dialoge erstellen mit »QDialog« ... 1000
31.8 ... Vorgefertigte Dialoge von Qt ... 1008
31.9 ... Eigenen Dialog mit dem Qt Designer erstellen ... 1015
31.10 ... Grafische Bedienelemente von Qt (Qt-Widgets) ... 1031
31.11 ... Anwendungen in einem Hauptfenster ... 1037
31.12 ... Zusammenfassung ... 1048
Cheat Sheet ... 1052
Index ... 1055