C++

Das umfassende Handbuch zu Modern C++. Über 1.000 Seiten Profiwissen, aktuell zum Standard C++20
 
 
Rheinwerk (Verlag)
  • 2. Auflage
  • |
  • erschienen am 24. Juli 2020
 
  • Buch
  • |
  • Hardcover
  • |
  • 1120 Seiten
978-3-8362-7593-4 (ISBN)
 

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, sowie GUI-Entwicklung mit Qt.
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
  • GUI-Programmierung mit Qt
  • Extra: Tutorials zum Thema "guter Code"
2. Auflage
  • Deutsch
  • Bonn
  • |
  • Deutschland
Rheinwerk
  • Überarbeitete Ausgabe
  • Höhe: 246 mm
  • |
  • Breite: 175 mm
  • |
  • Dicke: 60 mm
  • 1950 gr
978-3-8362-7593-4 (9783836275934)
weitere Ausgaben werden ermittelt
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.
Vorwort ... 23 Vorwort zur 1. Auflage ... 25 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 ... 40 2.5 ... Die Kommandozeile unter Ubuntu ... 42 2.6 ... Die IDE »Microsoft Visual Studio Community« unter Windows ... 45 2.7 ... Das Beispielprogramm beschleunigen ... 48 3. C++ für Umsteiger ... 49 4. Die Grundbausteine von C++ ... 57 4.1 ... Kommentare ... 60 4.2 ... Die »include«-Direktive ... 60 4.3 ... Die Standardbibliothek ... 60 4.4 ... Die Funktion »main()« ... 61 4.5 ... Typen ... 61 4.6 ... Variablen ... 62 4.7 ... Initialisierung ... 62 4.8 ... Ausgabe auf der Konsole ... 63 4.9 ... Anweisungen ... 63 4.10 ... Ohne Eile erklärt ... 65 4.11 ... Operatoren ... 91 4.12 ... Eingebaute Datentypen ... 105 5. Guter Code, 1. Dan: Lesbar programmieren ... 143 5.1 ... Kommentare ... 144 5.2 ... Dokumentation ... 144 5.3 ... Einrückungen und Zeilenlänge ... 145 5.4 ... Zeilen pro Funktion und Datei ... 146 5.5 ... Klammern und Leerzeichen ... 147 5.6 ... Namen ... 148 6. Höhere Datentypen ... 151 6.1 ... Der Zeichenkettentyp »string« ... 152 6.2 ... Streams ... 158 6.3 ... Behälter und Zeiger ... 164 6.4 ... Die einfachen Sequenzcontainer ... 166 6.5 ... Algorithmen ... 171 6.6 ... Zeiger und C-Arrays ... 172 7. Funktionen ... 173 7.1 ... Deklaration und Definition einer Funktion ... 174 7.2 ... Funktionstyp ... 175 7.3 ... Funktionen verwenden ... 175 7.4 ... Eine Funktion definieren ... 177 7.5 ... Mehr zu Parametern ... 178 7.6 ... Funktionskörper ... 182 7.7 ... Parameter umwandeln ... 184 7.8 ... Funktionen überladen ... 186 7.9 ... Default-Parameter ... 188 7.10 ... Beliebig viele Argumente ... 190 7.11 ... Alternative Schreibweise zur Funktionsdeklaration ... 190 7.12 ... Spezialitäten ... 191 8. Anweisungen im Detail ... 195 8.1 ... Der Anweisungsblock ... 198 8.2 ... Die leere Anweisung ... 200 8.3 ... Deklarationsanweisung ... 201 8.4 ... Die Ausdrucksanweisung ... 203 8.5 ... Die »if«-Anweisung ... 204 8.6 ... Die »while«-Schleife ... 208 8.7 ... Die »do-while«-Schleife ... 210 8.8 ... Die »for«-Schleife ... 211 8.9 ... Die bereichsbasierte »for«-Schleife ... 213 8.10 ... Die »switch«-Verzweigung ... 215 8.11 ... Die »break«-Anweisung ... 219 8.12 ... Die »continue«-Anweisung ... 220 8.13 ... Die »return«-Anweisung ... 221 8.14 ... Die »goto«-Anweisung ... 222 8.15 ... Der »try-catch«-Block und »throw« ... 224 8.16 ... Zusammenfassung ... 225 9. Ausdrücke im Detail ... 227 9.1 ... Berechnungen und Seiteneffekte ... 228 9.2 ... Arten von Ausdrücken ... 229 9.3 ... Literale ... 230 9.4 ... Bezeichner ... 231 9.5 ... Klammern ... 231 9.6 ... Funktionsaufruf und Indexzugriff ... 232 9.7 ... Zuweisung ... 232 9.8 ... Typumwandlung ... 234 10. Fehlerbehandlung ... 237 10.1 ... Fehlerbehandlung mit Fehlercodes ... 239 10.2 ... Was ist eine Ausnahme? ... 242 10.3 ... Kleinere Fehlerbehandlungen ... 245 10.4 ... Weiterwerfen -- »rethrow« ... 245 10.5 ... Die Reihenfolge im »catch« ... 246 10.6 ... Typen für Exceptions ... 248 10.7 ... Wenn eine Exception aus »main« herausfällt ... 249 11. Guter Code, 2. Dan: Modularisierung ... 251 11.1 ... Programm, Bibliothek, Objektdatei ... 251 11.2 ... Bausteine ... 252 11.3 ... Trennen der Funktionalitäten ... 253 11.4 ... Ein modulares Beispielprojekt ... 255 11.5 ... Spezialthema: Unity-Builds ... 265 TEIL II Objektorientierte Programmierung und mehr ... 267 12. Von der Struktur zur Klasse ... 269 12.1 ... Initialisierung ... 271 12.2 ... Rückgabe eigener Typen ... 272 12.3 ... Methoden statt Funktionen ... 273 12.4 ... Das bessere »drucke« ... 276 12.5 ... Eine Ausgabe wie jede andere ... 278 12.6 ... Methoden inline definieren ... 279 12.7 ... Implementierung und Definition trennen ... 280 12.8 ... Initialisierung per Konstruktor ... 281 12.9 ... Struktur oder Klasse? ... 288 12.10 ... Zwischenergebnis ... 292 12.11 ... Verwendung eigener Datentypen ... 293 12.12 ... Typinferenz mit »auto« ... 308 12.13 ... Eigene Klassen in Standardcontainern ... 311 13. Namensräume und Qualifizierer ... 315 13.1 ... Der Namensraum »std« ... 315 13.2 ... Anonymer Namensraum ... 319 13.3 ... »static« macht lokal ... 321 13.4 ... »static« teilt gern ... 322 13.5 ... »static« macht dauerhaft ... 325 13.6 ... Zusammenfassung ... 328 13.7 ... »const« ... 329 13.8 ... Flüchtig mit »volatile« ... 344 14. Guter Code, 3. Dan: Testen ... 347 14.1 ... Arten des Tests ... 347 14.2 ... Frameworks ... 355 14.3 ... Boost.Test ... 359 14.4 ... Hilfsmakros für Assertions ... 363 14.5 ... Ein Beispielprojekt mit Unittests ... 366 15. Vererbung ... 379 15.1 ... Beziehungen ... 380 15.2 ... Vererbung in C++ ... 383 15.3 ... Hat-ein versus ist-ein ... 384 15.4 ... Gemeinsamkeiten finden ... 384 15.5 ... Abgeleitete Typen erweitern ... 387 15.6 ... Methoden überschreiben ... 388 15.7 ... Wie Methoden funktionieren ... 389 15.8 ... Virtuelle Methoden ... 390 15.9 ... Konstruktoren in Klassenhierarchien ... 392 15.10 ... Typumwandlung in Klassenhierarchien ... 394 15.11 ... Wann virtuell? ... 396 15.12 ... Andere Designs zur Erweiterbarkeit ... 397 16. Der Lebenszyklus von Klassen ... 399 16.1 ... Erzeugung und Zerstörung ... 400 16.2 ... Temporary: kurzlebige Werte ... 402 16.3 ... Der Destruktor zum Konstruktor ... 404 16.4 ... Yoda-Bedingung ... 408 16.5 ... Konstruktion, Destruktion und Exceptions ... 410 16.6 ... Kopieren ... 411 16.7 ... Zuweisungsoperator ... 414 16.8 ... Streichen von Methoden ... 417 16.9 ... Verschiebeoperationen ... 419 16.10 ... Operatoren ... 424 16.11 ... Eigene Operatoren in einem Datentyp ... 427 16.12 ... Besondere Klassenformen ... 432 17. Guter Code, 4. Dan: Sicherheit, Qualität und Nachhaltigkeit ... 437 17.1 ... Die Nullerregel ... 437 17.2 ... RAII -- Resource Acquisition Is Initialization ... 443 18. Spezielles für Klassen ... 453 18.1 ... Dürfen alles sehen -- »friend«-Klassen ... 453 18.2 ... Non-public-Vererbung ... 457 18.3 ... Signaturklassen als Interfaces ... 463 18.4 ... Multiple Vererbung ... 467 18.5 ... Rautenförmige multiple Vererbung -- »virtual« für Klassenhierarchien ... 476 18.6 ... Literale Datentypen -- »constexpr« für Konstruktoren ... 480 19. Guter Code, 5. Dan: Klassisches objektorientiertes Design ... 483 19.1 ... Objekte in C++ ... 485 19.2 ... Objektorientiert designen ... 486 TEIL III Fortgeschrittene Themen ... 505 20. Zeiger ... 507 20.1 ... Adressen ... 508 20.2 ... Zeiger ... 509 20.3 ... Gefahren von Aliasing ... 511 20.4 ... Heapspeicher und Stapelspeicher ... 513 20.5 ... Smarte Pointer ... 516 20.6 ... Rohe Zeiger ... 526 20.7 ... C-Arrays ... 530 20.8 ... Iteratoren ... 536 20.9 ... Zeiger als Iteratoren ... 538 20.10 ... Zeiger im Container ... 538 20.11 ... Die Ausnahme: wann das Wegräumen nicht nötig ist ... 539 21. Makros ... 541 21.1 ... Der Präprozessor ... 542 21.2 ... Vorsicht vor fehlenden Klammern ... 546 21.3 ... Vorsicht vor Mehrfachausführung ... 547 21.4 ... Typvariabilität von Makros ... 548 21.5 ... Zusammenfassung ... 551 22. Schnittstelle zu C ... 553 22.1 ... Mit Bibliotheken arbeiten ... 554 22.2 ... C-Header ... 555 22.3 ... C-Ressourcen ... 558 22.4 ... »void«-Pointer ... 559 22.5 ... Daten lesen ... 559 22.6 ... Das Hauptprogramm ... 561 22.7 ... Zusammenfassung ... 561 23. Templates ... 563 23.1 ... Funktionstemplates ... 564 23.2 ... Funktionstemplates in der Standardbibliothek ... 574 23.3 ... Eine Klasse als Funktion ... 578 23.4 ... Templateklassen ... 593 23.5 ... Templates mit variabler Argumentanzahl ... 607 23.6 ... Eigene Literale ... 611 TEIL IV Die Standardbibliothek ... 621 24. Container ... 623 24.1 ... Grundlagen ... 624 24.2 ... Iteratoren-Grundlagen ... 631 24.3 ... Allokatoren: Speicherfragen ... 635 24.4 ... Containergemeinsamkeiten ... 638 24.5 ... Ein Überblick über die Standardcontainerklassen ... 639 24.6 ... Die sequenziellen Containerklassen ... 643 24.7 ... Assoziativ und geordnet ... 680 24.8 ... Nur assoziativ und nicht garantiert ... 712 24.9 ... Containeradapter ... 742 24.10 ... Sonderfälle: »string«, »basic_string« und »vector« ... 743 24.11 ... Sonderfälle: »vector«, »array« und »bitset« ... 744 24.12 ... Sonderfall: Value-Array mit »valarray<>« ... 747 25. Containerunterstützung ... 757 25.1 ... Algorithmen ... 757 25.2 ... Iteratoren ... 758 25.3 ... Iteratoradapter ... 759 25.4 ... Algorithmen der Standardbibliothek ... 760 25.5 ... Parallelle Ausführung ... 762 25.6 ... Liste der Algorithmusfunktionen ... 765 25.7 ... Berechnungen auf Containern mit »« ... 780 25.8 ... Kopie statt Zuweisung -- Werte in uninitialisierten Speicherbereichen ... 785 25.9 ... Eigene Algorithmen ... 787 26. Guter Code, 6. Dan: Für jede Aufgabe der richtige Container ... 791 26.1 ... Alle Container nach Aspekten sortiert ... 791 26.2 ... Rezepte für Container ... 796 26.3 ... Iteratoren sind mehr als nur Zeiger ... 802 26.4 ... Algorithmen je nach Container unterschiedlich implementieren ... 804 27. Streams und Dateien ... 807 27.1 ... Ein- und Ausgabekonzept ... 807 27.2 ... Globale, vordefinierte Standardstreams ... 808 27.3 ... Methoden für die Aus- und Eingabe von Streams ... 810 27.4 ... Fehlerbehandlung und Zustand von Streams ... 814 27.5 ... Streams manipulieren und formatieren ... 818 27.6 ... Streams für die Dateiein- und Dateiausgabe ... 829 27.7 ... Streams für Strings ... 843 27.8 ... Streampuffer ... 848 27.9 ... »filesystem« ... 851 28. Standardbibliothek -- Extras ... 855 28.1 ... »pair« und »tuple« ... 855 28.2 ... Reguläre Ausdrücke ... 863 28.3 ... Zufall ... 872 28.4 ... Mathematisches ... 881 28.5 ... Systemfehlerbehandlung mit »system_error« ... 897 28.6 ... Laufzeittypinformationen -- »« und »« ... 906 28.7 ... Hilfsklassen rund um Funktoren -- »« ... 910 28.8 ... »optional« für einen oder keinen Wert ... 917 28.9 ... »variant« für einen von mehreren Typen ... 918 28.10 ... »any« hält jeden Typ ... 920 28.11 ... Spezielle mathematische Funktionen ... 921 28.12 ... Schnelle Umwandlung mit »charconv« ... 921 29. Threads -- Programmieren mit Mehrläufigkeit ... 925 29.1 ... C++-Threading-Grundlagen ... 926 29.2 ... Gemeinsame Daten ... 942 29.3 ... Andere Möglichkeiten zur Synchronisation ... 955 29.4 ... Im eigenen Speicher mit »thread_local« ... 959 29.5 ... Mit »condition_variable« auf Ereignisse warten ... 960 29.6 ... Einmal warten mit »future« ... 965 29.7 ... Atomics ... 976 29.8 ... Zusammenfassung ... 981 TEIL V Über den Standard hinaus ... 985 30. Guter Code, 7. Dan: Richtlinien ... 987 30.1 ... Guideline Support Library ... 988 30.2 ... C++ Core Guidelines ... 989 31. GUI-Programmierung mit Qt ... 1003 31.1 ... Ein erstes Miniprogramm ... 1007 31.2 ... Objektbäume und Besitz ... 1018 31.3 ... Signale und Slots ... 1019 31.4 ... Klassenhierarchie von Qt ... 1039 31.5 ... Eigene Widgets mit dem Qt Designer erstellen ... 1042 31.6 ... Widgets anordnen ... 1048 31.7 ... Dialoge erstellen mit »QDialog« ... 1052 31.8 ... Vorgefertigte Dialoge von Qt ... 1059 31.9 ... Eigenen Dialog mit dem Qt Designer erstellen ... 1067 31.10 ... Grafische Bedienelemente von Qt (Qt-Widgets) ... 1083 31.11 ... Anwendungen in einem Hauptfenster ... 1089 31.12 ... Zusammenfassung ... 1100 Cheat Sheet ... 1104 Index ... 1107

Sofort lieferbar

39,90 €
inkl. 5% MwSt.
in den Warenkorb