Der C++-Programmierer: C++ lernen – professionell anwenden – Lösungen nutzen. Aktuell zu C++17
معرفی کتاب «Der C++-Programmierer: C++ lernen – professionell anwenden – Lösungen nutzen. Aktuell zu C++17» نوشتهٔ Ulrich Breymann، منتشرشده توسط نشر Hanser Berlin. in Carl Hanser Verlag GmbH & Co. KG در سال 2018. این کتاب در فرمت pdf، زبان آلمانی ارائه شده است.
Ein C++-Praxisbuch für alle Ansprüche – mehr brauchen Einsteiger und Profis nicht „Der C++-Programmierer“ entspricht dem ISO- Standard C++17. Das Buch stellt Grundlagen und fortgeschrittene Themen der C++-Programmierung vor. Es enthält über 150 praktische Lösungen für typische Aufgabenstellungen und mehr als 90 Übungsaufgaben – inkl. Musterlösungen. C++ an Beispielen lernen - Als C++-Neuling erhalten Sie eine motivierende Einführung in die Sprache C++. Die vielen Beispiele sind leicht nachzuvollziehen. Klassen und Objekte, Templates, STL und Exceptions sind bald keine Fremdwörter mehr für Sie. - Als Profi finden Sie in diesem Buch kurze Einführungen zu Themen wie Thread- und Netzwerkprogrammierung und grafische Benutzungsoberflächen. Durch den Einsatz der Boost- und Qt-Libraries wird größtmögliche Portabilität erreicht. Kenntnisse in der Softwareentwicklung mit C++ vertiefen Weil Softwareentwicklung nicht nur Programmierung ist, finden Sie ergänzend Themen für die professionelle Arbeit: Die effiziente Programmerzeugung mit make, Unit-Tests und TDD (Test Driven Development). Das unverzichtbare Nachschlagewerk für alle Das integrierte "C++-Rezeptbuch" mit mehr als 150 praktischen Lösungen, das sehr umfangreiche Register und ein detailliertes Inhaltsverzeichnis machen das Buch zu einem unverzichtbaren Nachschlagewerk für alle, die sich im Studium oder professionell mit der Softwareentwicklung in C++ beschäftigen. Extra: farbiges E-Book inside Systemvoraussetzungen für E-Book inside: Internet-Verbindung und Adobe-Reader oder Ebook-Reader bzw. Adobe Digital Editions. Inhaltsverzeichnis Vorwort Teil I: Einführung in C++ 1 Es geht los! 1.1 Historisches 1.2 Objektorientierte Programmierung 1.3 Werkzeuge zum Programmieren 1.4 Das erste Programm 1.4.1 Namenskonventionen 1.5 Integrierte Entwicklungsumgebung 1.6 Einfache Datentypen und Operatoren 1.6.1 Ausdruck 1.6.2 Ganze Zahlen 1.6.3 Reelle Zahlen 1.6.4 Konstanten 1.6.5 Zeichen 1.6.6 Logischer Datentyp bool 1.6.7 Referenzen 1.6.8 Regeln zum Bilden von Ausdrücken 1.6.9 Standard-Typumwandlungen 1.7 Gültigkeitsbereich und Sichtbarkeit 1.7.1 Namespace std 1.8 Kontrollstrukturen 1.8.1 Anweisungen 1.8.2 Sequenz (Reihung) 1.8.3 Auswahl (Selektion, Verzweigung) 1.8.4 Fallunterscheidungen mit switch 1.8.5 Wiederholungen 1.8.6 Kontrolle mit break und continue 1.9 Benutzerdefinierte und zusammengesetzte Datentypen 1.9.1 Aufzählungstypen 1.9.2 Strukturen 1.9.3 Der C++-Standardtyp vector 1.9.4 Zeichenketten: Der C++-Standardtyp string 1.9.5 Container und Schleifen 1.9.6 Typermittlung mit auto 1.9.7 Deklaration einer strukturierten Bindung mit auto 1.9.8 Unions und Bitfelder 1.10 Einfache Ein- und Ausgabe 1.10.1 Standardein- und -ausgabe 1.10.2 Ein- und Ausgabe mit Dateien 2 Programmstrukturierung 2.1 Funktionen 2.1.1 Aufbau und Prototypen 2.1.2 Gültigkeitsbereiche und Sichtbarkeit in Funktionen 2.1.3 Lokale static-Variable: Funktion mit Gedächtnis 2.2 Schnittstellen zum Datentransfer 2.2.1 Übergabe per Wert 2.2.2 Übergabe per Referenz 2.2.3 Gefahren bei der Rückgabe von Referenzen 2.2.4 Vorgegebene Parameterwerte und unterschiedliche Parameterzahl 2.2.5 Überladen von Funktionen 2.2.6 Funktion main() 2.2.7 Beispiel Taschenrechnersimulation 2.2.8 Spezifikation von Funktionen 2.2.9 Alternative Funktions-Syntax 2.3 Modulare Programmgestaltung 2.3.1 Steuerung der Übersetzung nur mit #include 2.3.2 Einbinden vorübersetzter Programmteile 2.3.3 Übersetzungseinheit, Deklaration, Definition 2.3.4 Dateiübergreifende Gültigkeit und Sichtbarkeit 2.3.5 Präprozessordirektiven und Makros 2.4 Namensräume 2.5 inline-Funktionen und -Variable 2.5.1 inline-Variablen 2.6 constexpr-Funktionen 2.7 Rückgabetyp auto 2.8 Funktions-Templates 2.8.1 Spezialisierung von Templates 2.8.2 Einbinden von Templates 2.9 C++-Header 2.9.1 Einbinden von C-Funktionen 3 Objektorientierung 1 3.1 Abstrakter Datentyp 3.2 Klassen und Objekte 3.2.1 const-Objekte und Methoden 3.2.2 inline-Elementfunktionen 3.3 Initialisierung und Konstruktoren 3.3.1 Standardkonstruktor 3.3.2 Direkte Initialisierung der Attribute 3.3.3 Allgemeine Konstruktoren 3.3.4 Kopierkonstruktor 3.3.5 Typumwandlungskonstruktor 3.3.6 Konstruktor und mehr vorgeben oder verbieten 3.3.7 Einheitliche Initialisierung und Sequenzkonstruktor 3.3.8 Delegierender Konstruktor 3.3.9 constexpr-Konstruktor und -Methoden 3.4 Beispiel: Rationale Zahlen 3.4.1 Aufgabenstellung 3.4.2 Entwurf 3.4.3 Implementation 3.5 Destruktoren 3.6 Wie kommt man zu Klassen und Objekten? Ein Beispiel 3.7 Gegenseitige Abhängigkeit von Klassen 4 Intermezzo: Zeiger 4.1 Zeiger und Adressen 4.2 C-Arrays 4.2.1 C-Array, std::size() und sizeof 4.2.2 Initialisierung von C-Arrays 4.2.3 Zeigerarithmetik 4.2.4 Indexoperator bei C-Arrays 4.2.5 C-Array mit begin() und end() durchlaufen 4.3 C-Zeichenketten 4.3.1 Schleifen und C-Strings 4.4 Dynamische Datenobjekte 4.4.1 Freigeben dynamischer Objekte 4.5 Zeiger und Funktionen 4.5.1 Parameterübergabe mit Zeigern 4.5.2 Array als Funktionsparameter 4.5.3 const und Zeiger-Parameter 4.5.4 Parameter des main-Programms 4.5.5 Gefahren bei der Rückgabe von Zeigern 4.6 this-Zeiger 4.7 Mehrdimensionale C-Arrays 4.7.1 Statische mehrdimensionale C-Arrays 4.7.2 Mehrdimensionales Array als Funktionsparameter 4.7.3 Dynamisch erzeugte mehrdimensionale Arrays 4.7.4 Klasse für dynamisches zweidimensionales Array 4.8 Binäre Ein-/Ausgabe 4.9 Zeiger auf Funktionen 4.10 Typumwandlungen für Zeiger 4.11 Zeiger auf Elementfunktionen und -daten 4.11.1 Zeiger auf Elementfunktionen 4.11.2 Zeiger auf Elementdaten 4.12 Komplexe Deklarationen lesen 4.12.1 Lesbarkeit mit typedef und using verbessern 4.13 Alternative zu rohen Zeigern, new und delete 5 Objektorientierung 2 5.1 Eine String-Klasse 5.1.1 friend-Funktionen 5.2 String-Ansicht 5.3 Klassenspezifische Daten und Funktionen 5.3.1 Klassenspezifische Konstante 5.4 Klassen-Templates 5.4.1 Ein Stack-Template 5.4.2 Stack mit statisch festgelegter Größe 5.5 Typbestimmung mit decltype und declval 6 Vererbung 6.1 Vererbung und Initialisierung 6.2 Zugriffsschutz 6.3 Typbeziehung zwischen Ober- und Unterklasse 6.4 Code-Wiederverwendung 6.4.1 Konstruktor erben 6.5 Überschreiben von Funktionen in abgeleiteten Klassen 6.5.1 Virtuelle Funktionen 6.5.2 Abstrakte Klassen 6.5.3 Virtueller Destruktor 6.5.4 Private virtuelle Funktionen 6.6 Probleme der Modellierung mit Vererbung 6.7 Mehrfachvererbung 6.7.1 Namenskonflikte 6.7.2 Virtuelle Basisklassen 6.8 Standard-Typumwandlungsoperatoren 6.9 Typinformationen zur Laufzeit 6.10 Using-Deklaration für protected-Funktionen 6.11 Private- und Protected-Vererbung 7 Fehlerbehandlung 7.1 Ausnahmebehandlung 7.1.1 Exception-Spezifikation in Deklarationen 7.1.2 Exception-Hierarchie in C++ 7.1.3 Besondere Fehlerbehandlungsfunktionen 7.1.4 Erkennen logischer Fehler 7.1.5 Arithmetische Fehler / Division durch 0 7.2 Speicherbeschaffung mit new 7.3 Exception-Sicherheit 8 Überladen von Operatoren 8.1 Rationale Zahlen — noch einmal 8.1.1 Arithmetische Operatoren 8.1.2 Ausgabeoperator < und * 8.5.1 Smart Pointer und die C++-Standardbibliothek 8.6 Objekt als Funktion 8.7 new und delete überladen 8.7.1 Unterscheidung zwischen Heap- und Stack-Objekten 8.7.2 Fehlende delete-Anweisung entdecken 8.7.3 Eigene Speicherverwaltung für einen bestimmten Typ 8.7.4 Empfehlungen im Umgang mit new und delete 8.8 Operatoren für Literale 8.8.1 Stringliterale 8.8.2 Benutzerdefinierte Literale 8.9 Mehrdimensionale Matrizen 8.9.1 Zweidimensionale Matrix als Vektor von Vektoren 8.9.2 Dreidimensionale Matrix 8.10 Zuweisung und Vergleich bei Vererbung 9 Dateien und Ströme 9.1 Ausgabe 9.1.1 Formatierung der Ausgabe 9.2 Eingabe 9.3 Manipulatoren 9.3.1 Eigene Manipulatoren 9.4 Fehlerbehandlung 9.5 Typumwandlung von Dateiobjekten nach bool 9.6 Arbeit mit Dateien 9.6.1 Positionierung in Dateien 9.6.2 Lesen und Schreiben in derselben Datei 9.7 Umleitung auf Strings 9.8 Tabelle formatiert ausgeben 9.9 Formatierte Daten lesen 9.9.1 Eingabe benutzerdefinierter Typen 9.10 Blockweise lesen und schreiben 9.10.1 vector-Objekt binär lesen und schreiben 9.10.2 array-Objekt binär lesen und schreiben 9.10.3 Matrix binär lesen und schreiben 9.11 Ergänzungen 10 Die Standard Template Library (STL) 10.1 Container, Iteratoren, Algorithmen 10.2 Iteratoren im Detail 10.3 Beispiel verkettete Liste Teil II: Fortgeschrittene Themen 11 Performance, Wert- und Referenzsemantik 11.1 Performanceproblem Wertsemantik 11.1.1 Auslassen der Kopie 11.1.2 Temporäre Objekte bei der Zuweisung 11.2 Referenzsemantik für R-Werte 11.3 Optimierung durch Referenzsemantik für R-Werte 11.3.1 Bewegender Konstruktor 11.3.2 Bewegender Zuweisungsoperator 11.4 Die move()-Funktion 11.4.1 Regel zur Template-Auswertung von &&-Parametern 11.5 Ein effizienter binärer Plusoperator 11.5.1 Return Value Optimization (RVO) 11.5.2 Kopien temporärer Objekte eliminieren 11.5.3 Verbesserung durch verzögerte Auswertung 11.5.4 Weitere Optimierungsmöglichkeiten 11.6 Rule of three/five/zero 11.6.1 Rule of three 11.6.2 Rule of five 11.6.3 Rule of zero 12 Lambda-Funktionen 12.1 Eigenschaften 12.1.1 Äquivalenz zum Funktionszeiger 12.1.2 Lambda-Funktion und Klasse 12.2 Generische Lambda-Funktionen 12.3 Parametererfassung mit [] 13 Template-Metaprogrammierung 13.1 Grundlagen 13.2 Variadic Templates: Templates mit variabler Parameterzahl 13.2.1 Ablauf der Auswertung durch den Compiler 13.2.2 Anzahl der Parameter 13.2.3 Parameterexpansion 13.3 Fold-Expressions 13.3.1 Weitere Varianten 13.3.2 Fold-Expression mit Kommaoperator 13.4 Klassen-Template mit variabler Stelligkeit 14 Reguläre Ausdrücke 14.1 Elemente regulärer Ausdrücke 14.1.1 Greedy oder lazy? 14.2 Interaktive Auswertung 14.3 Auszug des regex-API 14.4 Verarbeitung von \n 14.5 Anwendungen 15 Threads 15.1 Zeit und Dauer 15.2 Threads 15.3 Die Klasse thread 15.3.1 Thread-Group 15.4 Synchronisation kritischer Abschnitte 15.5 Thread-Steuerung: Pausieren, Fortsetzen, Beenden 15.5.1 Data Race 15.6 Warten auf Ereignisse 15.7 Reader/Writer-Problem 15.7.1 Wenn Threads verhungern 15.7.2 Reader/Writer-Varianten 15.8 Atomare Veränderung von Variablen 15.9 Asynchrone verteilte Bearbeitung einer Aufgabe 15.10 Thread-Sicherheit 16 Grafische Benutzungsschnittstellen 16.1 Ereignisgesteuerte Programmierung 16.2 GUI-Programmierung mit Qt 16.2.1 Installation und Einsatz 16.2.2 Meta-Objektsystem 16.2.3 Der Programmablauf 16.2.4 Ereignis abfragen 16.3 Signale, Slots und Widgets 16.4 Dialog 16.5 Qt oder Standard-C++? 16.5.1 Threads 16.5.2 Verzeichnisbaum durchwandern 17 Internet-Anbindung 17.1 Protokolle 17.2 Adressen 17.3 Socket 17.3.1 Bidirektionale Kommunikation 17.3.2 UDP-Sockets 17.3.3 Atomuhr mit UDP abfragen 17.4 HTTP 17.4.1 Verbindung mit GET 17.4.2 Verbindung mit POST 17.5 Mini-Webserver 18 Datenbankanbindung 18.1 C++-Interface 18.2 Anwendungsbeispiel Teil III: Ausgewählte Methoden und Werkzeuge der Softwareentwicklung 19 Effiziente Programmerzeugung mit make 19.1 Wirkungsweise 19.2 Variablen und Muster 19.3 Universelles Makefile für einfache Projekte 19.4 Automatische Ermittlung von Abhängigkeiten 19.4.1 Getrennte Verzeichnisse: src, obj, bin 19.5 Makefile für Verzeichnisbäume 19.5.1 Rekursive Make-Aufrufe 19.5.2 Ein Makefile für alles 19.6 Automatische Erzeugung von Makefiles 19.6.1 Makefile für rekursive Aufrufe erzeugen 19.7 Erzeugen von Bibliotheken 19.7.1 Statische Bibliotheksmodule 19.7.2 Dynamische Bibliotheksmodule 19.8 Code Bloat bei der Instanziierung von Templates vermeiden 19.8.1 extern-Template 19.9 CMake 19.10 GNU Autotools 20 Unit-Test 20.1 Werkzeuge 20.2 Test Driven Development 20.3 Boost Unit Test Framework 20.3.1 Beispiel: Testgetriebene Entwicklung einer Operatorfunktion 20.3.2 Fixture 20.3.3 Testprotokoll und Log-Level 20.3.4 Prüf-Makros 20.3.5 Kommandozeilen-Optionen Teil IV: Das C++-Rezeptbuch: Tipps und Lösungen für typische Aufgaben 21 Sichere Programmentwicklung 21.1 Regeln zum Design von Methoden 21.2 Defensive Programmierung 21.2.1 double- und float-Werte richtig vergleichen 21.2.2 const und constexpr verwenden 21.2.3 Anweisungen nach for/if/while einklammern 21.2.4 int und unsigned/size_t nicht mischen 21.2.5 size_t oder auto statt unsigned int verwenden 21.2.6 Postfix++ mit Präfix++ implementieren 21.2.7 Ein Destruktor darf keine Exception werfen 21.2.8 explicit-Typumwandlungsoperator bevorzugen 21.2.9 explicit-Konstruktor für eine Typumwandlung bevorzugen 21.2.10 Leere Standardkonstruktoren vermeiden 21.2.11 Mit override Schreibfehler reduzieren 21.2.12 Kopieren und Zuweisung verbieten 21.2.13 Vererbung verbieten 21.2.14 Überschreiben einer virtuellen Methode verhindern 21.2.15 >>Rule of zero
دانلود کتاب Der C++-Programmierer: C++ lernen – professionell anwenden – Lösungen nutzen. Aktuell zu C++17