Dieses Standardwerk führt Sie in die moderne C++-Entwicklung ein. Entwickeln Sie Software mit hohen Ansprüchen an Funktionalität, Effizienz und Sicherheit. Ausführlich werden der Sprachkern, die objektorientierte Programmierung und die Standardbibliothek behandelt. Sie lernen zum Beispiel, mit Streams umzugehen, Containertypen zu nutzen und nebenläufige Anwendungen zu entwicklen.Nicht zuletzt geht es dem Autor um das Wie: Freuen Sie sich auf ein Lehrbuch über die Konzepte des Modern C++, die C++ Core Guidelines, Sprachversionen und vor allem über guten Code. Aus dem Inhalt: Sprachgrundlagen Fehlerbehandlung Objektorientierte Programmierung Zeiger Schnittstelle zu C Templates Container Standardbibliothek C++ Core Guidelines Extra: Tutorials zum Thema guter Code
C++ Core Guidelines und Techniken für guten Code
Autorentext
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.
Inhalt
Vorwort ... 25 TEIL I. Grundlagen ... 29 1. Das C++-Handbuch ... 31 1.1 ... Neu und modern ... 32 1.2 ... »Dan«-Kapitel ... 32 1.3 ... Darstellung in diesem Buch ... 33 1.4 ... Verwendete Formatierungen ... 33 1.5 ... Sorry for my Denglish ... 34 2. Programmieren in C++ ... 37 2.1 ... Übersetzen ... 38 2.2 ... Übersetzungsphasen ... 39 2.3 ... Aktuelle Compiler ... 40 2.4 ... Entwicklungsumgebungen ... 41 2.5 ... Die Kommandozeile unter Ubuntu ... 43 2.6 ... Die IDE »Visual Studio Code« unter Windows ... 47 2.7 ... Das Beispielprogramm beschleunigen ... 54 3. C++ für Umsteiger ... 55 4. Die Grundbausteine von C++ ... 63 4.1 ... Ein schneller Überblick ... 66 4.2 ... Ohne Eile erklärt ... 71 4.3 ... Operatoren ... 100 4.4 ... Eingebaute Datentypen ... 116 4.5 ... Undefiniertes und unspezifiziertes Verhalten ... 157 5. Guter Code, 1. Dan: Lesbar programmieren ... 159 5.1 ... Kommentare ... 160 5.2 ... Dokumentation ... 160 5.3 ... Einrückungen und Zeilenlänge ... 161 5.4 ... Zeilen pro Funktion und Datei ... 162 5.5 ... Klammern und Leerzeichen ... 163 5.6 ... Namen ... 164 6. Höhere Datentypen ... 167 6.1 ... Der Zeichenkettentyp »string« ... 168 6.2 ... Streams ... 174 6.3 ... Behälter und Zeiger ... 181 6.4 ... Die einfachen Sequenzcontainer ... 183 6.5 ... Algorithmen ... 189 6.6 ... Zeiger und C-Arrays ... 189 7. Funktionen ... 191 7.1 ... Deklaration und Definition einer Funktion ... 192 7.2 ... Funktionstyp ... 193 7.3 ... Funktionen verwenden ... 194 7.4 ... Eine Funktion definieren ... 195 7.5 ... Mehr zu Parametern ... 197 7.6 ... Funktionskörper ... 201 7.7 ... Parameter umwandeln ... 203 7.8 ... Funktionen überladen ... 205 7.9 ... Defaultparameter ... 208 7.10 ... Beliebig viele Argumente ... 209 7.11 ... Alternative Schreibweise zur Funktionsdeklaration ... 210 7.12 ... Spezialitäten ... 211 8. Anweisungen im Detail ... 215 8.1 ... Der Anweisungsblock ... 218 8.2 ... Die leere Anweisung ... 221 8.3 ... Deklarationsanweisung ... 221 8.4 ... Die Ausdrucksanweisung ... 224 8.5 ... Die »if«-Anweisung ... 224 8.6 ... Die »while«-Schleife ... 229 8.7 ... Die »do-while«-Schleife ... 231 8.8 ... Die »for«-Schleife ... 232 8.9 ... Die bereichsbasierte »for«-Schleife ... 234 8.10 ... Die »switch«-Verzweigung ... 236 8.11 ... Die »break«-Anweisung ... 240 8.12 ... Die »continue«-Anweisung ... 241 8.13 ... Die »return«-Anweisung ... 242 8.14 ... Die »goto«-Anweisung ... 243 8.15 ... Der »try-catch«-Block und »throw« ... 245 8.16 ... Zusammenfassung ... 247 9. Ausdrücke im Detail ... 249 9.1 ... Berechnungen und Seiteneffekte ... 250 9.2 ... Arten von Ausdrücken ... 251 9.3 ... Literale ... 253 9.4 ... Bezeichner ... 253 9.5 ... Klammern ... 254 9.6 ... Funktionsaufruf und Indexzugriff ... 254 9.7 ... Zuweisung ... 255 9.8 ... Typumwandlung ... 257 10. Fehlerbehandlung ... 259 10.1 ... Fehlerbehandlung mit Fehlercodes ... 261 10.2 ... Was ist eine Ausnahme? ... 264 10.3 ... Kleinere Fehlerbehandlungen ... 267 10.4 ... Weiterwerfen -- »rethrow« ... 268 10.5 ... Die Reihenfolge im »catch« ... 268 10.6 ... Typen für Exceptions ... 271 10.7 ... Wenn eine Exception aus »main« herausfällt ... 272 11. Guter Code, 2. Dan: Modularisierung ... 273 11.1 ... Programm, Bibliothek, Objektdatei ... 273 11.2 ... Bausteine ... 274 11.3 ... Trennen der Funktionalitäten ... 275 11.4 ... Ein modulares Beispielprojekt ... 277 TEIL II. Objektorientierte Programmierung und mehr ... 289 12. Von der Struktur zur Klasse ... 291 12.1 ... Initialisierung ... 294 12.2 ... Rückgabe eigener Typen ... 295 12.3 ... Methoden statt Funktionen ... 297 12.4 ... Das bessere »drucke« ... 300 12.5 ... Eine Ausgabe wie jede andere ... 302 12.6 ... Methoden inline definieren ... 303 12.7 ... Implementierung und Definition trennen ... 304 12.8 ... Initialisierung per Konstruktor ... 305 12.9 ... Struktur oder Klasse? ... 313 12.10 ... Zwischenergebnis ... 318 12.11 ... Eigene Datentypen verwenden ... 318 12.12 ... Typinferenz mit »auto« ... 335 12.13 ... Eigene Klassen in Standardcontainern ... 339 13. Namensräume und Qualifizierer ... 343 13.1 ... Der Namensraum »std« ... 344 13.2 ... Anonymer Namensraum ... 347 13.3 ... »static« macht lokal ... 349 13.4 ... »static« teilt gern ... 350 13.5 ... Ferne Initialisierung oder »static inline«-Datenfelder ... 353 13.6 ... Garantiert zur Compilezeit initialisiert mit »constinit« ... 354 13.7 ... »static« macht dauerhaft ... 354 13.8 ... »inline namespace« ... 356 13.9 ... Zusammenfassung ... 358 13.10 ... »const« ... 358 13.11 ... Flüchtig mit »volatile« ... 380 14. Guter Code, 3. Dan: Testen ... 383 14.1 ... Arten des Tests ... 383 14.2 ... Frameworks ... 391 14.3 ... Boost.Test ... 396 14.4 ... Hilfsmakros für Assertions ... 400 14.5 ... Ein Beispielprojekt mit Unittests ... 403 15. Vererbung ... 417 15.1 ... Beziehungen ... 418 15.2 ... Vererbung in C++ ... 421 15.3 ... Hat-ein versus ist-ein ... 422 15.4 ... Gemeinsamkeiten finden ... 422 15.5 ... Abgeleitete Typen erweitern ... 425 15.6 ... Methoden überschreiben ... 426 15.7 ... Wie Methoden funktionieren ... 427 15.8 ... Virtuelle Methoden ... 429 15.9 ... Konstruktoren in Klassenhierarchien ... 431 15.10 ... Typumwandlung in Klassenhierarchien ... 433 15.11 ... Wann virtuell? ... 434 15.12 ... Andere Designs zur Erweiterbarkeit ... 436 16. Der Lebenszyklus von Klassen ... 439 16.1 ... Erzeugung und Zerstörung ... 440 16.2 ... Temporary: kurzlebige Werte ... 442 16.3 ... Der Destruktor zum Konstruktor ... 444 16.4 ... Yoda-Bedingung ... 449 16.5 ... Konstruktion, Destruktion und Exceptions ... 450 16.6 ... Kopieren ... 452 16.7 ... Zuweisungsoperator ... 455 16.8 ... Streichen von Methoden ... 459 16.9 ... Verschiebeoperationen ... 461 16.10 ... Operatoren ... 466 16.11 ... Eigene Operatoren in einem Datentyp ... 470 16.12 ... Besondere Klassenformen ... 478 17. Guter Code, 4. Dan: Sicherheit, Qualität und Nachhaltigkeit ... 483 17.1 ... Die Nullerregel ... 483 17.2 ... RAII -- Resource Acquisition Is Initialization ... 489 18. Spezielles für Klassen ... 499 18.1 ... Dürfen alles sehen -- »friend«-Klassen ... 499 18.2 ... Non-public-Vererbung ... 504 18.3 ... Signaturklassen als Interfaces ... 510 18.4 ... Multiple Vererbung ... 514 18.5 ... Rautenförmige multiple Vererbung -- »virtual« für Klassenhierarchien ... 524 18.6 ... Literale Datentypen -- »constexpr« für Konstruktoren ... 528 19. Guter Code, 5. Dan: Klassisches objektorientiertes Design ... 531 19.1 ... Objekte in C++ ... 533 19.2 ... Objektorientiert designen ... 534 TEIL III. Fortgeschrittene Themen ... 555 20. Zeiger ... 557 20.1 ... Adressen ... 558 20.2 ... Zeiger ... 560 20.3 ... Gefahren von Aliasing ... 562 20.4 ... Heapspeicher und Sta…
C++ Core Guidelines und Techniken für guten Code
Autorentext
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.
Inhalt
Vorwort ... 25 TEIL I. Grundlagen ... 29 1. Das C++-Handbuch ... 31 1.1 ... Neu und modern ... 32 1.2 ... »Dan«-Kapitel ... 32 1.3 ... Darstellung in diesem Buch ... 33 1.4 ... Verwendete Formatierungen ... 33 1.5 ... Sorry for my Denglish ... 34 2. Programmieren in C++ ... 37 2.1 ... Übersetzen ... 38 2.2 ... Übersetzungsphasen ... 39 2.3 ... Aktuelle Compiler ... 40 2.4 ... Entwicklungsumgebungen ... 41 2.5 ... Die Kommandozeile unter Ubuntu ... 43 2.6 ... Die IDE »Visual Studio Code« unter Windows ... 47 2.7 ... Das Beispielprogramm beschleunigen ... 54 3. C++ für Umsteiger ... 55 4. Die Grundbausteine von C++ ... 63 4.1 ... Ein schneller Überblick ... 66 4.2 ... Ohne Eile erklärt ... 71 4.3 ... Operatoren ... 100 4.4 ... Eingebaute Datentypen ... 116 4.5 ... Undefiniertes und unspezifiziertes Verhalten ... 157 5. Guter Code, 1. Dan: Lesbar programmieren ... 159 5.1 ... Kommentare ... 160 5.2 ... Dokumentation ... 160 5.3 ... Einrückungen und Zeilenlänge ... 161 5.4 ... Zeilen pro Funktion und Datei ... 162 5.5 ... Klammern und Leerzeichen ... 163 5.6 ... Namen ... 164 6. Höhere Datentypen ... 167 6.1 ... Der Zeichenkettentyp »string« ... 168 6.2 ... Streams ... 174 6.3 ... Behälter und Zeiger ... 181 6.4 ... Die einfachen Sequenzcontainer ... 183 6.5 ... Algorithmen ... 189 6.6 ... Zeiger und C-Arrays ... 189 7. Funktionen ... 191 7.1 ... Deklaration und Definition einer Funktion ... 192 7.2 ... Funktionstyp ... 193 7.3 ... Funktionen verwenden ... 194 7.4 ... Eine Funktion definieren ... 195 7.5 ... Mehr zu Parametern ... 197 7.6 ... Funktionskörper ... 201 7.7 ... Parameter umwandeln ... 203 7.8 ... Funktionen überladen ... 205 7.9 ... Defaultparameter ... 208 7.10 ... Beliebig viele Argumente ... 209 7.11 ... Alternative Schreibweise zur Funktionsdeklaration ... 210 7.12 ... Spezialitäten ... 211 8. Anweisungen im Detail ... 215 8.1 ... Der Anweisungsblock ... 218 8.2 ... Die leere Anweisung ... 221 8.3 ... Deklarationsanweisung ... 221 8.4 ... Die Ausdrucksanweisung ... 224 8.5 ... Die »if«-Anweisung ... 224 8.6 ... Die »while«-Schleife ... 229 8.7 ... Die »do-while«-Schleife ... 231 8.8 ... Die »for«-Schleife ... 232 8.9 ... Die bereichsbasierte »for«-Schleife ... 234 8.10 ... Die »switch«-Verzweigung ... 236 8.11 ... Die »break«-Anweisung ... 240 8.12 ... Die »continue«-Anweisung ... 241 8.13 ... Die »return«-Anweisung ... 242 8.14 ... Die »goto«-Anweisung ... 243 8.15 ... Der »try-catch«-Block und »throw« ... 245 8.16 ... Zusammenfassung ... 247 9. Ausdrücke im Detail ... 249 9.1 ... Berechnungen und Seiteneffekte ... 250 9.2 ... Arten von Ausdrücken ... 251 9.3 ... Literale ... 253 9.4 ... Bezeichner ... 253 9.5 ... Klammern ... 254 9.6 ... Funktionsaufruf und Indexzugriff ... 254 9.7 ... Zuweisung ... 255 9.8 ... Typumwandlung ... 257 10. Fehlerbehandlung ... 259 10.1 ... Fehlerbehandlung mit Fehlercodes ... 261 10.2 ... Was ist eine Ausnahme? ... 264 10.3 ... Kleinere Fehlerbehandlungen ... 267 10.4 ... Weiterwerfen -- »rethrow« ... 268 10.5 ... Die Reihenfolge im »catch« ... 268 10.6 ... Typen für Exceptions ... 271 10.7 ... Wenn eine Exception aus »main« herausfällt ... 272 11. Guter Code, 2. Dan: Modularisierung ... 273 11.1 ... Programm, Bibliothek, Objektdatei ... 273 11.2 ... Bausteine ... 274 11.3 ... Trennen der Funktionalitäten ... 275 11.4 ... Ein modulares Beispielprojekt ... 277 TEIL II. Objektorientierte Programmierung und mehr ... 289 12. Von der Struktur zur Klasse ... 291 12.1 ... Initialisierung ... 294 12.2 ... Rückgabe eigener Typen ... 295 12.3 ... Methoden statt Funktionen ... 297 12.4 ... Das bessere »drucke« ... 300 12.5 ... Eine Ausgabe wie jede andere ... 302 12.6 ... Methoden inline definieren ... 303 12.7 ... Implementierung und Definition trennen ... 304 12.8 ... Initialisierung per Konstruktor ... 305 12.9 ... Struktur oder Klasse? ... 313 12.10 ... Zwischenergebnis ... 318 12.11 ... Eigene Datentypen verwenden ... 318 12.12 ... Typinferenz mit »auto« ... 335 12.13 ... Eigene Klassen in Standardcontainern ... 339 13. Namensräume und Qualifizierer ... 343 13.1 ... Der Namensraum »std« ... 344 13.2 ... Anonymer Namensraum ... 347 13.3 ... »static« macht lokal ... 349 13.4 ... »static« teilt gern ... 350 13.5 ... Ferne Initialisierung oder »static inline«-Datenfelder ... 353 13.6 ... Garantiert zur Compilezeit initialisiert mit »constinit« ... 354 13.7 ... »static« macht dauerhaft ... 354 13.8 ... »inline namespace« ... 356 13.9 ... Zusammenfassung ... 358 13.10 ... »const« ... 358 13.11 ... Flüchtig mit »volatile« ... 380 14. Guter Code, 3. Dan: Testen ... 383 14.1 ... Arten des Tests ... 383 14.2 ... Frameworks ... 391 14.3 ... Boost.Test ... 396 14.4 ... Hilfsmakros für Assertions ... 400 14.5 ... Ein Beispielprojekt mit Unittests ... 403 15. Vererbung ... 417 15.1 ... Beziehungen ... 418 15.2 ... Vererbung in C++ ... 421 15.3 ... Hat-ein versus ist-ein ... 422 15.4 ... Gemeinsamkeiten finden ... 422 15.5 ... Abgeleitete Typen erweitern ... 425 15.6 ... Methoden überschreiben ... 426 15.7 ... Wie Methoden funktionieren ... 427 15.8 ... Virtuelle Methoden ... 429 15.9 ... Konstruktoren in Klassenhierarchien ... 431 15.10 ... Typumwandlung in Klassenhierarchien ... 433 15.11 ... Wann virtuell? ... 434 15.12 ... Andere Designs zur Erweiterbarkeit ... 436 16. Der Lebenszyklus von Klassen ... 439 16.1 ... Erzeugung und Zerstörung ... 440 16.2 ... Temporary: kurzlebige Werte ... 442 16.3 ... Der Destruktor zum Konstruktor ... 444 16.4 ... Yoda-Bedingung ... 449 16.5 ... Konstruktion, Destruktion und Exceptions ... 450 16.6 ... Kopieren ... 452 16.7 ... Zuweisungsoperator ... 455 16.8 ... Streichen von Methoden ... 459 16.9 ... Verschiebeoperationen ... 461 16.10 ... Operatoren ... 466 16.11 ... Eigene Operatoren in einem Datentyp ... 470 16.12 ... Besondere Klassenformen ... 478 17. Guter Code, 4. Dan: Sicherheit, Qualität und Nachhaltigkeit ... 483 17.1 ... Die Nullerregel ... 483 17.2 ... RAII -- Resource Acquisition Is Initialization ... 489 18. Spezielles für Klassen ... 499 18.1 ... Dürfen alles sehen -- »friend«-Klassen ... 499 18.2 ... Non-public-Vererbung ... 504 18.3 ... Signaturklassen als Interfaces ... 510 18.4 ... Multiple Vererbung ... 514 18.5 ... Rautenförmige multiple Vererbung -- »virtual« für Klassenhierarchien ... 524 18.6 ... Literale Datentypen -- »constexpr« für Konstruktoren ... 528 19. Guter Code, 5. Dan: Klassisches objektorientiertes Design ... 531 19.1 ... Objekte in C++ ... 533 19.2 ... Objektorientiert designen ... 534 TEIL III. Fortgeschrittene Themen ... 555 20. Zeiger ... 557 20.1 ... Adressen ... 558 20.2 ... Zeiger ... 560 20.3 ... Gefahren von Aliasing ... 562 20.4 ... Heapspeicher und Sta…
Titel
C++
Untertitel
Das umfassende Handbuch
Autor
EAN
9783836298551
Format
E-Book (epub)
Hersteller
Veröffentlichung
06.06.2024
Digitaler Kopierschutz
frei
Dateigrösse
6 MB
Anzahl Seiten
1172
Lesemotiv
Unerwartete Verzögerung
Ups, ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal.