
Der C++-Programmierer
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
"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.
More details
Other editions
Additional editions

Person
Content
2 - Vorwort [Seite 24]
3 - Teil I: Einführung in C++ [Seite 28]
3.1 - 1 Es geht los! [Seite 30]
3.1.1 - 1.1 Historisches [Seite 30]
3.1.2 - 1.2 Objektorientierte Programmierung [Seite 31]
3.1.3 - 1.3 Werkzeuge zum Programmieren [Seite 33]
3.1.4 - 1.4 Das erste Programm [Seite 34]
3.1.4.1 - 1.4.1 Namenskonventionen [Seite 40]
3.1.5 - 1.5 Integrierte Entwicklungsumgebung [Seite 40]
3.1.6 - 1.6 Einfache Datentypen und Operatoren [Seite 43]
3.1.6.1 - 1.6.1 Ausdruck [Seite 43]
3.1.6.2 - 1.6.2 Ganze Zahlen [Seite 43]
3.1.6.3 - 1.6.3 Reelle Zahlen [Seite 50]
3.1.6.4 - 1.6.4 Konstanten [Seite 54]
3.1.6.5 - 1.6.5 Zeichen [Seite 55]
3.1.6.6 - 1.6.6 Logischer Datentyp bool [Seite 59]
3.1.6.7 - 1.6.7 Referenzen [Seite 60]
3.1.6.8 - 1.6.8 Regeln zum Bilden von Ausdrücken [Seite 61]
3.1.6.9 - 1.6.9 Standard-Typumwandlungen [Seite 62]
3.1.7 - 1.7 Gültigkeitsbereich und Sichtbarkeit [Seite 63]
3.1.7.1 - 1.7.1 Namespace std [Seite 65]
3.1.8 - 1.8 Kontrollstrukturen [Seite 66]
3.1.8.1 - 1.8.1 Anweisungen [Seite 66]
3.1.8.2 - 1.8.2 Sequenz (Reihung) [Seite 68]
3.1.8.3 - 1.8.3 Auswahl (Selektion, Verzweigung) [Seite 68]
3.1.8.4 - 1.8.4 Fallunterscheidungen mit switch [Seite 73]
3.1.8.5 - 1.8.5 Wiederholungen [Seite 76]
3.1.8.6 - 1.8.6 Kontrolle mit break und continue [Seite 83]
3.1.9 - 1.9 Benutzerdefinierte und zusammengesetzte Datentypen [Seite 85]
3.1.9.1 - 1.9.1 Aufzählungstypen [Seite 85]
3.1.9.2 - 1.9.2 Strukturen [Seite 88]
3.1.9.3 - 1.9.3 Der C++-Standardtyp vector [Seite 89]
3.1.9.4 - 1.9.4 Zeichenketten: Der C++-Standardtyp string [Seite 94]
3.1.9.5 - 1.9.5 Container und Schleifen [Seite 96]
3.1.9.6 - 1.9.6 Typermittlung mit auto [Seite 98]
3.1.9.7 - 1.9.7 Deklaration einer strukturierten Bindung mit auto [Seite 99]
3.1.9.8 - 1.9.8 Unions und Bitfelder [Seite 100]
3.1.10 - 1.10 Einfache Ein- und Ausgabe [Seite 102]
3.1.10.1 - 1.10.1 Standardein- und -ausgabe [Seite 102]
3.1.10.2 - 1.10.2 Ein- und Ausgabe mit Dateien [Seite 105]
3.2 - 2 Programmstrukturierung [Seite 110]
3.2.1 - 2.1 Funktionen [Seite 110]
3.2.1.1 - 2.1.1 Aufbau und Prototypen [Seite 111]
3.2.1.2 - 2.1.2 Gültigkeitsbereiche und Sichtbarkeit in Funktionen [Seite 113]
3.2.1.3 - 2.1.3 Lokale static-Variable: Funktion mit Gedächtnis [Seite 114]
3.2.2 - 2.2 Schnittstellen zum Datentransfer [Seite 115]
3.2.2.1 - 2.2.1 Übergabe per Wert [Seite 116]
3.2.2.2 - 2.2.2 Übergabe per Referenz [Seite 120]
3.2.2.3 - 2.2.3 Gefahren bei der Rückgabe von Referenzen [Seite 121]
3.2.2.4 - 2.2.4 Vorgegebene Parameterwerte und unterschiedliche Parameterzahl [Seite 122]
3.2.2.5 - 2.2.5 Überladen von Funktionen [Seite 123]
3.2.2.6 - 2.2.6 Funktion main() [Seite 124]
3.2.2.7 - 2.2.7 Beispiel Taschenrechnersimulation [Seite 125]
3.2.2.8 - 2.2.8 Spezifikation von Funktionen [Seite 130]
3.2.2.9 - 2.2.9 Alternative Funktions-Syntax [Seite 130]
3.2.3 - 2.3 Modulare Programmgestaltung [Seite 130]
3.2.3.1 - 2.3.1 Steuerung der Übersetzung nur mit #include [Seite 131]
3.2.3.2 - 2.3.2 Einbinden vorübersetzter Programmteile [Seite 131]
3.2.3.3 - 2.3.3 Übersetzungseinheit, Deklaration, Definition [Seite 133]
3.2.3.4 - 2.3.4 Dateiübergreifende Gültigkeit und Sichtbarkeit [Seite 135]
3.2.3.5 - 2.3.5 Präprozessordirektiven und Makros [Seite 137]
3.2.4 - 2.4 Namensräume [Seite 145]
3.2.5 - 2.5 inline-Funktionen und -Variable [Seite 147]
3.2.5.1 - 2.5.1 inline-Variablen [Seite 148]
3.2.6 - 2.6 constexpr-Funktionen [Seite 148]
3.2.7 - 2.7 Rückgabetyp auto [Seite 150]
3.2.8 - 2.8 Funktions-Templates [Seite 152]
3.2.8.1 - 2.8.1 Spezialisierung von Templates [Seite 154]
3.2.8.2 - 2.8.2 Einbinden von Templates [Seite 155]
3.2.9 - 2.9 C++-Header [Seite 157]
3.2.9.1 - 2.9.1 Einbinden von C-Funktionen [Seite 159]
3.3 - 3 Objektorientierung 1 [Seite 160]
3.3.1 - 3.1 Abstrakter Datentyp [Seite 161]
3.3.2 - 3.2 Klassen und Objekte [Seite 162]
3.3.2.1 - 3.2.1 const-Objekte und Methoden [Seite 165]
3.3.2.2 - 3.2.2 inline-Elementfunktionen [Seite 166]
3.3.3 - 3.3 Initialisierung und Konstruktoren [Seite 167]
3.3.3.1 - 3.3.1 Standardkonstruktor [Seite 167]
3.3.3.2 - 3.3.2 Direkte Initialisierung der Attribute [Seite 169]
3.3.3.3 - 3.3.3 Allgemeine Konstruktoren [Seite 169]
3.3.3.4 - 3.3.4 Kopierkonstruktor [Seite 172]
3.3.3.5 - 3.3.5 Typumwandlungskonstruktor [Seite 175]
3.3.3.6 - 3.3.6 Konstruktor und mehr vorgeben oder verbieten [Seite 177]
3.3.3.7 - 3.3.7 Einheitliche Initialisierung und Sequenzkonstruktor [Seite 177]
3.3.3.8 - 3.3.8 Delegierender Konstruktor [Seite 180]
3.3.3.9 - 3.3.9 constexpr-Konstruktor und -Methoden [Seite 181]
3.3.4 - 3.4 Beispiel: Rationale Zahlen [Seite 184]
3.3.4.1 - 3.4.1 Aufgabenstellung [Seite 184]
3.3.4.2 - 3.4.2 Entwurf [Seite 185]
3.3.4.3 - 3.4.3 Implementation [Seite 188]
3.3.5 - 3.5 Destruktoren [Seite 193]
3.3.6 - 3.6 Wie kommt man zu Klassen und Objekten? Ein Beispiel [Seite 195]
3.3.7 - 3.7 Gegenseitige Abhängigkeit von Klassen [Seite 200]
3.4 - 4 Intermezzo: Zeiger [Seite 202]
3.4.1 - 4.1 Zeiger und Adressen [Seite 203]
3.4.2 - 4.2 C-Arrays [Seite 206]
3.4.2.1 - 4.2.1 C-Array, std::size() und sizeof [Seite 208]
3.4.2.2 - 4.2.2 Initialisierung von C-Arrays [Seite 209]
3.4.2.3 - 4.2.3 Zeigerarithmetik [Seite 209]
3.4.2.4 - 4.2.4 Indexoperator bei C-Arrays [Seite 210]
3.4.2.5 - 4.2.5 C-Array mit begin() und end() durchlaufen [Seite 210]
3.4.3 - 4.3 C-Zeichenketten [Seite 211]
3.4.3.1 - 4.3.1 Schleifen und C-Strings [Seite 214]
3.4.4 - 4.4 Dynamische Datenobjekte [Seite 218]
3.4.4.1 - 4.4.1 Freigeben dynamischer Objekte [Seite 221]
3.4.5 - 4.5 Zeiger und Funktionen [Seite 223]
3.4.5.1 - 4.5.1 Parameterübergabe mit Zeigern [Seite 223]
3.4.5.2 - 4.5.2 Array als Funktionsparameter [Seite 225]
3.4.5.3 - 4.5.3 const und Zeiger-Parameter [Seite 226]
3.4.5.4 - 4.5.4 Parameter des main-Programms [Seite 226]
3.4.5.5 - 4.5.5 Gefahren bei der Rückgabe von Zeigern [Seite 227]
3.4.6 - 4.6 this-Zeiger [Seite 228]
3.4.7 - 4.7 Mehrdimensionale C-Arrays [Seite 230]
3.4.7.1 - 4.7.1 Statische mehrdimensionale C-Arrays [Seite 230]
3.4.7.2 - 4.7.2 Mehrdimensionales Array als Funktionsparameter [Seite 231]
3.4.7.3 - 4.7.3 Dynamisch erzeugte mehrdimensionale Arrays [Seite 234]
3.4.7.4 - 4.7.4 Klasse für dynamisches zweidimensionales Array [Seite 236]
3.4.8 - 4.8 Binäre Ein-/Ausgabe [Seite 242]
3.4.9 - 4.9 Zeiger auf Funktionen [Seite 245]
3.4.10 - 4.10 Typumwandlungen für Zeiger [Seite 249]
3.4.11 - 4.11 Zeiger auf Elementfunktionen und -daten [Seite 250]
3.4.11.1 - 4.11.1 Zeiger auf Elementfunktionen [Seite 250]
3.4.11.2 - 4.11.2 Zeiger auf Elementdaten [Seite 251]
3.4.12 - 4.12 Komplexe Deklarationen lesen [Seite 251]
3.4.12.1 - 4.12.1 Lesbarkeit mit typedef und using verbessern [Seite 252]
3.4.13 - 4.13 Alternative zu rohen Zeigern, new und delete [Seite 254]
3.5 - 5 Objektorientierung 2 [Seite 256]
3.5.1 - 5.1 Eine String-Klasse [Seite 256]
3.5.1.1 - 5.1.1 friend-Funktionen [Seite 262]
3.5.2 - 5.2 String-Ansicht [Seite 263]
3.5.3 - 5.3 Klassenspezifische Daten und Funktionen [Seite 266]
3.5.3.1 - 5.3.1 Klassenspezifische Konstante [Seite 270]
3.5.4 - 5.4 Klassen-Templates [Seite 272]
3.5.4.1 - 5.4.1 Ein Stack-Template [Seite 272]
3.5.4.2 - 5.4.2 Stack mit statisch festgelegter Größe [Seite 274]
3.5.5 - 5.5 Typbestimmung mit decltype und declval [Seite 276]
3.6 - 6 Vererbung [Seite 280]
3.6.1 - 6.1 Vererbung und Initialisierung [Seite 286]
3.6.2 - 6.2 Zugriffsschutz [Seite 287]
3.6.3 - 6.3 Typbeziehung zwischen Ober- und Unterklasse [Seite 289]
3.6.4 - 6.4 Code-Wiederverwendung [Seite 290]
3.6.4.1 - 6.4.1 Konstruktor erben [Seite 291]
3.6.5 - 6.5 Überschreiben von Funktionen in abgeleiteten Klassen [Seite 293]
3.6.5.1 - 6.5.1 Virtuelle Funktionen [Seite 295]
3.6.5.2 - 6.5.2 Abstrakte Klassen [Seite 300]
3.6.5.3 - 6.5.3 Virtueller Destruktor [Seite 305]
3.6.5.4 - 6.5.4 Private virtuelle Funktionen [Seite 308]
3.6.6 - 6.6 Probleme der Modellierung mit Vererbung [Seite 310]
3.6.7 - 6.7 Mehrfachvererbung [Seite 313]
3.6.7.1 - 6.7.1 Namenskonflikte [Seite 315]
3.6.7.2 - 6.7.2 Virtuelle Basisklassen [Seite 316]
3.6.8 - 6.8 Standard-Typumwandlungsoperatoren [Seite 320]
3.6.9 - 6.9 Typinformationen zur Laufzeit [Seite 323]
3.6.10 - 6.10 Using-Deklaration für protected-Funktionen [Seite 324]
3.6.11 - 6.11 Private- und Protected-Vererbung [Seite 325]
3.7 - 7 Fehlerbehandlung [Seite 330]
3.7.1 - 7.1 Ausnahmebehandlung [Seite 332]
3.7.1.1 - 7.1.1 Exception-Spezifikation in Deklarationen [Seite 335]
3.7.1.2 - 7.1.2 Exception-Hierarchie in C++ [Seite 336]
3.7.1.3 - 7.1.3 Besondere Fehlerbehandlungsfunktionen [Seite 338]
3.7.1.4 - 7.1.4 Erkennen logischer Fehler [Seite 339]
3.7.1.5 - 7.1.5 Arithmetische Fehler / Division durch 0 [Seite 341]
3.7.2 - 7.2 Speicherbeschaffung mit new [Seite 342]
3.7.3 - 7.3 Exception-Sicherheit [Seite 343]
3.8 - 8 Überladen von Operatoren [Seite 346]
3.8.1 - 8.1 Rationale Zahlen - noch einmal [Seite 348]
3.8.1.1 - 8.1.1 Arithmetische Operatoren [Seite 348]
3.8.1.2 - 8.1.2 Ausgabeoperator << [Seite 350]
3.8.2 - 8.2 Eine Klasse für Vektoren [Seite 352]
3.8.2.1 - 8.2.1 Index-Operator [ ] [Seite 355]
3.8.2.2 - 8.2.2 Zuweisungsoperator = [Seite 357]
3.8.2.3 - 8.2.3 Mathematische Vektoren [Seite 360]
3.8.2.4 - 8.2.4 Multiplikationsoperator [Seite 361]
3.8.3 - 8.3 Inkrement-Operator ++ [Seite 362]
3.8.4 - 8.4 Typumwandlungsoperator [Seite 366]
3.8.5 - 8.5 Smart Pointer: Operatoren -> und * [Seite 368]
3.8.5.1 - 8.5.1 Smart Pointer und die C++-Standardbibliothek [Seite 373]
3.8.6 - 8.6 Objekt als Funktion [Seite 374]
3.8.7 - 8.7 new und delete überladen [Seite 376]
3.8.7.1 - 8.7.1 Unterscheidung zwischen Heap- und Stack-Objekten [Seite 379]
3.8.7.2 - 8.7.2 Fehlende delete-Anweisung entdecken [Seite 381]
3.8.7.3 - 8.7.3 Eigene Speicherverwaltung für einen bestimmten Typ [Seite 382]
3.8.7.4 - 8.7.4 Empfehlungen im Umgang mit new und delete [Seite 386]
3.8.8 - 8.8 Operatoren für Literale [Seite 387]
3.8.8.1 - 8.8.1 Stringliterale [Seite 388]
3.8.8.2 - 8.8.2 Benutzerdefinierte Literale [Seite 389]
3.8.9 - 8.9 Mehrdimensionale Matrizen [Seite 391]
3.8.9.1 - 8.9.1 Zweidimensionale Matrix als Vektor von Vektoren [Seite 392]
3.8.9.2 - 8.9.2 Dreidimensionale Matrix [Seite 395]
3.8.10 - 8.10 Zuweisung und Vergleich bei Vererbung [Seite 397]
3.9 - 9 Dateien und Ströme [Seite 406]
3.9.1 - 9.1 Ausgabe [Seite 408]
3.9.1.1 - 9.1.1 Formatierung der Ausgabe [Seite 408]
3.9.2 - 9.2 Eingabe [Seite 411]
3.9.3 - 9.3 Manipulatoren [Seite 414]
3.9.3.1 - 9.3.1 Eigene Manipulatoren [Seite 419]
3.9.4 - 9.4 Fehlerbehandlung [Seite 421]
3.9.5 - 9.5 Typumwandlung von Dateiobjekten nach bool [Seite 422]
3.9.6 - 9.6 Arbeit mit Dateien [Seite 423]
3.9.6.1 - 9.6.1 Positionierung in Dateien [Seite 424]
3.9.6.2 - 9.6.2 Lesen und Schreiben in derselben Datei [Seite 425]
3.9.7 - 9.7 Umleitung auf Strings [Seite 426]
3.9.8 - 9.8 Tabelle formatiert ausgeben [Seite 428]
3.9.9 - 9.9 Formatierte Daten lesen [Seite 429]
3.9.9.1 - 9.9.1 Eingabe benutzerdefinierter Typen [Seite 429]
3.9.10 - 9.10 Blockweise lesen und schreiben [Seite 430]
3.9.10.1 - 9.10.1 vector-Objekt binär lesen und schreiben [Seite 431]
3.9.10.2 - 9.10.2 array-Objekt binär lesen und schreiben [Seite 432]
3.9.10.3 - 9.10.3 Matrix binär lesen und schreiben [Seite 433]
3.9.11 - 9.11 Ergänzungen [Seite 435]
3.10 - 10 Die Standard Template Library (STL) [Seite 436]
3.10.1 - 10.1 Container, Iteratoren, Algorithmen [Seite 437]
3.10.2 - 10.2 Iteratoren im Detail [Seite 442]
3.10.3 - 10.3 Beispiel verkettete Liste [Seite 443]
4 - Teil II: Fortgeschrittene Themen [Seite 448]
4.1 - 11 Performance, Wert- und Referenzsemantik [Seite 450]
4.1.1 - 11.1 Performanceproblem Wertsemantik [Seite 451]
4.1.1.1 - 11.1.1 Auslassen der Kopie [Seite 452]
4.1.1.2 - 11.1.2 Temporäre Objekte bei der Zuweisung [Seite 453]
4.1.2 - 11.2 Referenzsemantik für R-Werte [Seite 454]
4.1.3 - 11.3 Optimierung durch Referenzsemantik für R-Werte [Seite 456]
4.1.3.1 - 11.3.1 Bewegender Konstruktor [Seite 459]
4.1.3.2 - 11.3.2 Bewegender Zuweisungsoperator [Seite 459]
4.1.4 - 11.4 Die move()-Funktion [Seite 460]
4.1.4.1 - 11.4.1 Regel zur Template-Auswertung von &&-Parametern [Seite 462]
4.1.5 - 11.5 Ein effizienter binärer Plusoperator [Seite 463]
4.1.5.1 - 11.5.1 Return Value Optimization (RVO) [Seite 464]
4.1.5.2 - 11.5.2 Kopien temporärer Objekte eliminieren [Seite 464]
4.1.5.3 - 11.5.3 Verbesserung durch verzögerte Auswertung [Seite 465]
4.1.5.4 - 11.5.4 Weitere Optimierungsmöglichkeiten [Seite 467]
4.1.6 - 11.6 Rule of three/five/zero [Seite 468]
4.1.6.1 - 11.6.1 Rule of three [Seite 468]
4.1.6.2 - 11.6.2 Rule of five [Seite 468]
4.1.6.3 - 11.6.3 Rule of zero [Seite 469]
4.2 - 12 Lambda-Funktionen [Seite 470]
4.2.1 - 12.1 Eigenschaften [Seite 471]
4.2.1.1 - 12.1.1 Äquivalenz zum Funktionszeiger [Seite 472]
4.2.1.2 - 12.1.2 Lambda-Funktion und Klasse [Seite 473]
4.2.2 - 12.2 Generische Lambda-Funktionen [Seite 473]
4.2.3 - 12.3 Parametererfassung mit [] [Seite 476]
4.3 - 13 Template-Metaprogrammierung [Seite 478]
4.3.1 - 13.1 Grundlagen [Seite 478]
4.3.2 - 13.2 Variadic Templates: Templates mit variabler Parameterzahl [Seite 481]
4.3.2.1 - 13.2.1 Ablauf der Auswertung durch den Compiler [Seite 482]
4.3.2.2 - 13.2.2 Anzahl der Parameter [Seite 483]
4.3.2.3 - 13.2.3 Parameterexpansion [Seite 483]
4.3.3 - 13.3 Fold-Expressions [Seite 485]
4.3.3.1 - 13.3.1 Weitere Varianten [Seite 486]
4.3.3.2 - 13.3.2 Fold-Expression mit Kommaoperator [Seite 487]
4.3.4 - 13.4 Klassen-Template mit variabler Stelligkeit [Seite 489]
4.4 - 14 Reguläre Ausdrücke [Seite 490]
4.4.1 - 14.1 Elemente regulärer Ausdrücke [Seite 491]
4.4.1.1 - 14.1.1 Greedy oder lazy? [Seite 493]
4.4.2 - 14.2 Interaktive Auswertung [Seite 494]
4.4.3 - 14.3 Auszug des regex-API [Seite 497]
4.4.4 - 14.4 Verarbeitung von \n [Seite 499]
4.4.5 - 14.5 Anwendungen [Seite 500]
4.5 - 15 Threads [Seite 502]
4.5.1 - 15.1 Zeit und Dauer [Seite 503]
4.5.2 - 15.2 Threads [Seite 504]
4.5.3 - 15.3 Die Klasse thread [Seite 508]
4.5.3.1 - 15.3.1 Thread-Group [Seite 510]
4.5.4 - 15.4 Synchronisation kritischer Abschnitte [Seite 511]
4.5.5 - 15.5 Thread-Steuerung: Pausieren, Fortsetzen, Beenden [Seite 514]
4.5.5.1 - 15.5.1 Data Race [Seite 519]
4.5.6 - 15.6 Warten auf Ereignisse [Seite 519]
4.5.7 - 15.7 Reader/Writer-Problem [Seite 525]
4.5.7.1 - 15.7.1 Wenn Threads verhungern [Seite 529]
4.5.7.2 - 15.7.2 Reader/Writer-Varianten [Seite 530]
4.5.8 - 15.8 Atomare Veränderung von Variablen [Seite 530]
4.5.9 - 15.9 Asynchrone verteilte Bearbeitung einer Aufgabe [Seite 533]
4.5.10 - 15.10 Thread-Sicherheit [Seite 535]
4.6 - 16 Grafische Benutzungsschnittstellen [Seite 536]
4.6.1 - 16.1 Ereignisgesteuerte Programmierung [Seite 537]
4.6.2 - 16.2 GUI-Programmierung mit Qt [Seite 538]
4.6.2.1 - 16.2.1 Installation und Einsatz [Seite 538]
4.6.2.2 - 16.2.2 Meta-Objektsystem [Seite 539]
4.6.2.3 - 16.2.3 Der Programmablauf [Seite 540]
4.6.2.4 - 16.2.4 Ereignis abfragen [Seite 541]
4.6.3 - 16.3 Signale, Slots und Widgets [Seite 542]
4.6.4 - 16.4 Dialog [Seite 551]
4.6.5 - 16.5 Qt oder Standard-C++? [Seite 554]
4.6.5.1 - 16.5.1 Threads [Seite 555]
4.6.5.2 - 16.5.2 Verzeichnisbaum durchwandern [Seite 556]
4.7 - 17 Internet-Anbindung [Seite 558]
4.7.1 - 17.1 Protokolle [Seite 559]
4.7.2 - 17.2 Adressen [Seite 559]
4.7.3 - 17.3 Socket [Seite 563]
4.7.3.1 - 17.3.1 Bidirektionale Kommunikation [Seite 566]
4.7.3.2 - 17.3.2 UDP-Sockets [Seite 568]
4.7.3.3 - 17.3.3 Atomuhr mit UDP abfragen [Seite 569]
4.7.4 - 17.4 HTTP [Seite 572]
4.7.4.1 - 17.4.1 Verbindung mit GET [Seite 573]
4.7.4.2 - 17.4.2 Verbindung mit POST [Seite 578]
4.7.5 - 17.5 Mini-Webserver [Seite 579]
4.8 - 18 Datenbankanbindung [Seite 588]
4.8.1 - 18.1 C++-Interface [Seite 589]
4.8.2 - 18.2 Anwendungsbeispiel [Seite 593]
5 - Teil III: Ausgewählte Methoden und Werkzeuge der Softwareentwicklung [Seite 600]
5.1 - 19 Effiziente Programmerzeugung mit make [Seite 602]
5.1.1 - 19.1 Wirkungsweise [Seite 604]
5.1.2 - 19.2 Variablen und Muster [Seite 606]
5.1.3 - 19.3 Universelles Makefile für einfache Projekte [Seite 607]
5.1.4 - 19.4 Automatische Ermittlung von Abhängigkeiten [Seite 608]
5.1.4.1 - 19.4.1 Getrennte Verzeichnisse: src, obj, bin [Seite 610]
5.1.5 - 19.5 Makefile für Verzeichnisbäume [Seite 612]
5.1.5.1 - 19.5.1 Rekursive Make-Aufrufe [Seite 613]
5.1.5.2 - 19.5.2 Ein Makefile für alles [Seite 615]
5.1.6 - 19.6 Automatische Erzeugung von Makefiles [Seite 616]
5.1.6.1 - 19.6.1 Makefile für rekursive Aufrufe erzeugen [Seite 617]
5.1.7 - 19.7 Erzeugen von Bibliotheken [Seite 618]
5.1.7.1 - 19.7.1 Statische Bibliotheksmodule [Seite 618]
5.1.7.2 - 19.7.2 Dynamische Bibliotheksmodule [Seite 620]
5.1.8 - 19.8 Code Bloat bei der Instanziierung von Templates vermeiden [Seite 623]
5.1.8.1 - 19.8.1 extern-Template [Seite 624]
5.1.9 - 19.9 CMake [Seite 625]
5.1.10 - 19.10 GNU Autotools [Seite 627]
5.2 - 20 Unit-Test [Seite 628]
5.2.1 - 20.1 Werkzeuge [Seite 629]
5.2.2 - 20.2 Test Driven Development [Seite 630]
5.2.3 - 20.3 Boost Unit Test Framework [Seite 631]
5.2.3.1 - 20.3.1 Beispiel: Testgetriebene Entwicklung einer Operatorfunktion [Seite 633]
5.2.3.2 - 20.3.2 Fixture [Seite 637]
5.2.3.3 - 20.3.3 Testprotokoll und Log-Level [Seite 638]
5.2.3.4 - 20.3.4 Prüf-Makros [Seite 639]
5.2.3.5 - 20.3.5 Kommandozeilen-Optionen [Seite 643]
6 - Teil IV: Das C++-Rezeptbuch: Tipps und Lösungen für typische Aufgaben [Seite 644]
6.1 - 21 Sichere Programmentwicklung [Seite 646]
6.1.1 - 21.1 Regeln zum Design von Methoden [Seite 646]
6.1.2 - 21.2 Defensive Programmierung [Seite 648]
6.1.2.1 - 21.2.1 double- und float-Werte richtig vergleichen [Seite 649]
6.1.2.2 - 21.2.2 const und constexpr verwenden [Seite 650]
6.1.2.3 - 21.2.3 Anweisungen nach for/if/while einklammern [Seite 650]
6.1.2.4 - 21.2.4 int und unsigned/size_t nicht mischen [Seite 650]
6.1.2.5 - 21.2.5 size_t oder auto statt unsigned int verwenden [Seite 651]
6.1.2.6 - 21.2.6 Postfix++ mit Präfix++ implementieren [Seite 651]
6.1.2.7 - 21.2.7 Ein Destruktor darf keine Exception werfen [Seite 652]
6.1.2.8 - 21.2.8 explicit-Typumwandlungsoperator bevorzugen [Seite 652]
6.1.2.9 - 21.2.9 explicit-Konstruktor für eine Typumwandlung bevorzugen [Seite 652]
6.1.2.10 - 21.2.10 Leere Standardkonstruktoren vermeiden [Seite 652]
6.1.2.11 - 21.2.11 Mit override Schreibfehler reduzieren [Seite 652]
6.1.2.12 - 21.2.12 Kopieren und Zuweisung verbieten [Seite 652]
6.1.2.13 - 21.2.13 Vererbung verbieten [Seite 653]
6.1.2.14 - 21.2.14 Überschreiben einer virtuellen Methode verhindern [Seite 654]
6.1.2.15 - 21.2.15 >>Rule of zero<< beachten [Seite 654]
6.1.2.16 - 21.2.16 One Definition Rule [Seite 654]
6.1.2.17 - 21.2.17 Defensiv Objekte löschen [Seite 654]
6.1.2.18 - 21.2.18 Speicherbeschaffung und -freigabe kapseln [Seite 655]
6.1.2.19 - 21.2.19 Programmierrichtlinien einhalten [Seite 655]
6.1.3 - 21.3 Exception-sichere Beschaffung von Ressourcen [Seite 655]
6.1.3.1 - 21.3.1 Sichere Verwendung von unique_ptr und shared_ptr [Seite 655]
6.1.3.2 - 21.3.2 So vermeiden Sie new und delete! [Seite 656]
6.1.3.3 - 21.3.3 shared_ptr für Arrays korrekt verwenden [Seite 657]
6.1.3.4 - 21.3.4 unique_ptr für Arrays korrekt verwenden [Seite 658]
6.1.3.5 - 21.3.5 Exception-sichere Funktion [Seite 659]
6.1.3.6 - 21.3.6 Exception-sicherer Konstruktor [Seite 659]
6.1.3.7 - 21.3.7 Exception-sichere Zuweisung [Seite 660]
6.1.4 - 21.4 Empfehlungen zur Thread-Programmierung [Seite 661]
6.1.4.1 - 21.4.1 Warten auf die Freigabe von Ressourcen [Seite 661]
6.1.4.2 - 21.4.2 Deadlock-Vermeidung [Seite 662]
6.1.4.3 - 21.4.3 notify_all oder notify_one? [Seite 662]
6.1.4.4 - 21.4.4 Performance mit Threads verbessern? [Seite 663]
6.2 - 22 Von der UML nach C++ [Seite 664]
6.2.1 - 22.1 Vererbung [Seite 664]
6.2.2 - 22.2 Interface anbieten und nutzen [Seite 665]
6.2.3 - 22.3 Assoziation [Seite 667]
6.2.3.1 - 22.3.1 Aggregation [Seite 670]
6.2.3.2 - 22.3.2 Komposition [Seite 670]
6.3 - 23 Algorithmen für verschiedene Aufgaben [Seite 672]
6.3.1 - 23.1 Algorithmen mit Strings [Seite 673]
6.3.1.1 - 23.1.1 String splitten [Seite 673]
6.3.1.2 - 23.1.2 String in Zahl umwandeln [Seite 674]
6.3.1.3 - 23.1.3 Zahl in String umwandeln [Seite 676]
6.3.1.4 - 23.1.4 Strings sprachlich richtig sortieren [Seite 677]
6.3.1.5 - 23.1.5 Umwandlung in Klein- bzw. Großschreibung [Seite 679]
6.3.1.6 - 23.1.6 Strings sprachlich richtig vergleichen [Seite 681]
6.3.1.7 - 23.1.7 Von der Groß-/Kleinschreibung unabhängiger Zeichenvergleich [Seite 682]
6.3.1.8 - 23.1.8 Von der Groß-/Kleinschreibung unabhängige Suche [Seite 683]
6.3.2 - 23.2 Textverarbeitung [Seite 684]
6.3.2.1 - 23.2.1 Datei durchsuchen [Seite 684]
6.3.2.2 - 23.2.2 Ersetzungen in einer Datei [Seite 686]
6.3.2.3 - 23.2.3 Lines of Code (LOC) ermitteln [Seite 688]
6.3.2.4 - 23.2.4 Zeilen, Wörter und Zeichen einer Datei zählen [Seite 689]
6.3.2.5 - 23.2.5 CSV-Datei lesen [Seite 689]
6.3.2.6 - 23.2.6 Kreuzreferenzliste [Seite 690]
6.3.3 - 23.3 Operationen auf Folgen [Seite 693]
6.3.3.1 - 23.3.1 Container anzeigen [Seite 694]
6.3.3.2 - 23.3.2 Folge mit gleichen Werten initialisieren [Seite 694]
6.3.3.3 - 23.3.3 Folge mit Werten eines Generators initialisieren [Seite 695]
6.3.3.4 - 23.3.4 Folge mit fortlaufenden Werten initialisieren [Seite 695]
6.3.3.5 - 23.3.5 Summe und Produkt [Seite 696]
6.3.3.6 - 23.3.6 Mittelwert und Standardabweichung [Seite 697]
6.3.3.7 - 23.3.7 Skalarprodukt [Seite 697]
6.3.3.8 - 23.3.8 Folge der Teilsummen oder -produkte [Seite 698]
6.3.3.9 - 23.3.9 Folge der Differenzen [Seite 699]
6.3.3.10 - 23.3.10 Kleinstes und größtes Element finden [Seite 700]
6.3.3.11 - 23.3.11 Elemente rotieren [Seite 702]
6.3.3.12 - 23.3.12 Elemente verwürfeln [Seite 703]
6.3.3.13 - 23.3.13 Dubletten entfernen [Seite 703]
6.3.3.14 - 23.3.14 Reihenfolge umdrehen [Seite 705]
6.3.3.15 - 23.3.15 Stichprobe [Seite 706]
6.3.3.16 - 23.3.16 Anzahl der Elemente, die einer Bedingung genügen [Seite 707]
6.3.3.17 - 23.3.17 Gilt ein Prädikat für alle, keins oder wenigstens ein Element einer Folge? [Seite 708]
6.3.3.18 - 23.3.18 Permutationen [Seite 709]
6.3.3.19 - 23.3.19 Lexikografischer Vergleich [Seite 712]
6.3.4 - 23.4 Sortieren und Verwandtes [Seite 713]
6.3.4.1 - 23.4.1 Partitionieren [Seite 713]
6.3.4.2 - 23.4.2 Sortieren [Seite 715]
6.3.4.3 - 23.4.3 Stabiles Sortieren [Seite 716]
6.3.4.4 - 23.4.4 Partielles Sortieren [Seite 717]
6.3.4.5 - 23.4.5 Das n.-größte oder n.-kleinste Element finden [Seite 718]
6.3.4.6 - 23.4.6 Verschmelzen (merge) [Seite 719]
6.3.5 - 23.5 Suchen und Finden [Seite 722]
6.3.5.1 - 23.5.1 Element finden [Seite 722]
6.3.5.2 - 23.5.2 Element einer Menge in der Folge finden [Seite 723]
6.3.5.3 - 23.5.3 Teilfolge finden [Seite 724]
6.3.5.4 - 23.5.4 Teilfolge mit speziellem Algorithmus finden [Seite 725]
6.3.5.5 - 23.5.5 Bestimmte benachbarte Elemente finden [Seite 727]
6.3.5.6 - 23.5.6 Bestimmte aufeinanderfolgende Werte finden [Seite 728]
6.3.5.7 - 23.5.7 Binäre Suche [Seite 729]
6.3.6 - 23.6 Mengenoperationen auf sortierten Strukturen [Seite 731]
6.3.6.1 - 23.6.1 Teilmengenrelation [Seite 732]
6.3.6.2 - 23.6.2 Vereinigung [Seite 733]
6.3.6.3 - 23.6.3 Schnittmenge [Seite 734]
6.3.6.4 - 23.6.4 Differenz [Seite 734]
6.3.6.5 - 23.6.5 Symmetrische Differenz [Seite 735]
6.3.7 - 23.7 Heap-Algorithmen [Seite 736]
6.3.7.1 - 23.7.1 pop_heap [Seite 737]
6.3.7.2 - 23.7.2 push_heap [Seite 738]
6.3.7.3 - 23.7.3 make_heap [Seite 738]
6.3.7.4 - 23.7.4 sort_heap [Seite 739]
6.3.7.5 - 23.7.5 is_heap [Seite 739]
6.3.8 - 23.8 Vergleich von Containern auch ungleichen Typs [Seite 740]
6.3.8.1 - 23.8.1 Unterschiedliche Elemente finden [Seite 740]
6.3.8.2 - 23.8.2 Prüfung auf gleiche Inhalte [Seite 742]
6.3.9 - 23.9 Rechnen mit komplexen Zahlen: Der C++-Standardtyp complex [Seite 743]
6.3.10 - 23.10 Schnelle zweidimensionale Matrix [Seite 745]
6.3.10.1 - 23.10.1 Optimierung mathematischer Array-Operationen [Seite 748]
6.3.11 - 23.11 Vermischtes [Seite 751]
6.3.11.1 - 23.11.1 Erkennung eines Datums [Seite 751]
6.3.11.2 - 23.11.2 Erkennung einer IPv4-Adresse [Seite 753]
6.3.11.3 - 23.11.3 Erzeugen von Zufallszahlen [Seite 754]
6.3.11.4 - 23.11.4 for_each - Auf jedem Element eine Funktion ausführen [Seite 759]
6.3.11.5 - 23.11.5 Verschiedene Möglichkeiten, Container-Bereiche zu kopieren [Seite 759]
6.3.11.6 - 23.11.6 Vertauschen von Elementen, Bereichen und Containern [Seite 762]
6.3.11.7 - 23.11.7 Elemente transformieren [Seite 762]
6.3.11.8 - 23.11.8 Ersetzen und Varianten [Seite 764]
6.3.11.9 - 23.11.9 Elemente herausfiltern [Seite 765]
6.3.11.10 - 23.11.10 Grenzwerte von Zahltypen [Seite 767]
6.3.11.11 - 23.11.11 Minimum und Maximum [Seite 767]
6.3.11.12 - 23.11.12 Wert begrenzen [Seite 769]
6.3.11.13 - 23.11.13 ggT und kgV [Seite 770]
6.3.12 - 23.12 Parallelisierbare Algorithmen [Seite 771]
6.4 - 24 Datei- und Verzeichnisoperationen [Seite 772]
6.4.1 - 24.1 Übersicht [Seite 773]
6.4.2 - 24.2 Pfadoperationen [Seite 774]
6.4.3 - 24.3 Datei oder Verzeichnis löschen [Seite 775]
6.4.3.1 - 24.3.1 Möglicherweise gefülltes Verzeichnis löschen [Seite 776]
6.4.4 - 24.4 Datei oder Verzeichnis kopieren [Seite 777]
6.4.5 - 24.5 Datei oder Verzeichnis umbenennen [Seite 778]
6.4.6 - 24.6 Verzeichnis anlegen [Seite 778]
6.4.7 - 24.7 Verzeichnis anzeigen [Seite 779]
6.4.8 - 24.8 Verzeichnisbaum anzeigen [Seite 780]
7 - Teil V: Die C++-Standardbibliothek [Seite 782]
7.1 - 25 Aufbau und Übersicht [Seite 784]
7.1.1 - 25.1 Auslassungen [Seite 786]
7.1.2 - 25.2 Beispiele des Buchs und die C++-Standardbibliothek [Seite 787]
7.2 - 26 Hilfsfunktionen und -klassen [Seite 790]
7.2.1 - 26.1 Relationale Operatoren [Seite 790]
7.2.2 - 26.2 Unterstützung der Referenzsemantik für R-Werte [Seite 791]
7.2.2.1 - 26.2.1 move() [Seite 791]
7.2.2.2 - 26.2.2 forward() [Seite 792]
7.2.3 - 26.3 Paare [Seite 793]
7.2.4 - 26.4 Tupel [Seite 795]
7.2.5 - 26.5 bitset [Seite 797]
7.2.6 - 26.6 Indexfolgen [Seite 800]
7.2.7 - 26.7 variant statt union [Seite 801]
7.2.8 - 26.8 Funktionsobjekte [Seite 802]
7.2.8.1 - 26.8.1 Arithmetische, vergleichende und logische Operationen [Seite 802]
7.2.8.2 - 26.8.2 Binden von Argumentwerten [Seite 803]
7.2.8.3 - 26.8.3 Funktionen in Objekte umwandeln [Seite 805]
7.2.9 - 26.9 Templates für rationale Zahlen [Seite 807]
7.2.10 - 26.10 Hüllklasse für Referenzen [Seite 808]
7.2.11 - 26.11 Optionale Objekte [Seite 809]
7.2.12 - 26.12 Type Traits [Seite 811]
7.2.12.1 - 26.12.1 Wie funktionieren Type Traits? - ein Beispiel [Seite 812]
7.2.12.2 - 26.12.2 Abfrage von Eigenschaften [Seite 814]
7.2.12.3 - 26.12.3 Abfrage numerischer Eigenschaften [Seite 816]
7.2.12.4 - 26.12.4 Typbeziehungen [Seite 816]
7.2.12.5 - 26.12.5 Typumwandlungen [Seite 817]
7.2.13 - 26.13 Auswahl weiterer Traits [Seite 817]
7.2.13.1 - 26.13.1 decay [Seite 817]
7.2.13.2 - 26.13.2 enable_if [Seite 817]
7.2.13.3 - 26.13.3 conditional [Seite 818]
7.2.13.4 - 26.13.4 default_order [Seite 818]
7.3 - 27 Container [Seite 820]
7.3.1 - 27.1 Gemeinsame Eigenschaften [Seite 822]
7.3.1.1 - 27.1.1 Initialisierungslisten [Seite 824]
7.3.1.2 - 27.1.2 Konstruktion an Ort und Stelle [Seite 824]
7.3.1.3 - 27.1.3 Reversible Container [Seite 825]
7.3.2 - 27.2 Sequenzen [Seite 826]
7.3.2.1 - 27.2.1 vector [Seite 827]
7.3.2.2 - 27.2.2 vector
7.3.2.3 - 27.2.3 list [Seite 829]
7.3.2.4 - 27.2.4 deque [Seite 832]
7.3.2.5 - 27.2.5 stack [Seite 833]
7.3.2.6 - 27.2.6 queue [Seite 835]
7.3.2.7 - 27.2.7 priority_queue [Seite 837]
7.3.2.8 - 27.2.8 array [Seite 839]
7.3.3 - 27.3 Assoziative Container [Seite 841]
7.3.4 - 27.4 Sortierte assoziative Container [Seite 843]
7.3.4.1 - 27.4.1 map und multimap [Seite 844]
7.3.4.2 - 27.4.2 set und multiset [Seite 848]
7.3.5 - 27.5 Hash-Container [Seite 850]
7.3.5.1 - 27.5.1 unordered_map und unordered_multimap [Seite 854]
7.3.5.2 - 27.5.2 unordered_set und unordered_multiset [Seite 856]
7.4 - 28 Iteratoren [Seite 858]
7.4.1 - 28.1 Iterator-Kategorien [Seite 859]
7.4.1.1 - 28.1.1 Anwendung von Traits [Seite 860]
7.4.2 - 28.2 Abstand und Bewegen [Seite 863]
7.4.3 - 28.3 Zugriff auf Anfang und Ende [Seite 864]
7.4.3.1 - 28.3.1 Reverse-Iteratoren [Seite 865]
7.4.4 - 28.4 Insert-Iteratoren [Seite 866]
7.4.5 - 28.5 Stream-Iteratoren [Seite 867]
7.5 - 29 Algorithmen [Seite 870]
7.5.1 - 29.1 Algorithmen mit Prädikat [Seite 871]
7.5.2 - 29.2 Übersicht [Seite 872]
7.6 - 30 Nationale Besonderheiten [Seite 876]
7.6.1 - 30.1 Sprachumgebung festlegen und ändern [Seite 876]
7.6.1.1 - 30.1.1 Die locale-Funktionen [Seite 878]
7.6.2 - 30.2 Zeichensätze und -codierung [Seite 880]
7.6.3 - 30.3 Zeichenklassifizierung und -umwandlung [Seite 884]
7.6.4 - 30.4 Kategorien [Seite 885]
7.6.4.1 - 30.4.1 collate [Seite 885]
7.6.4.2 - 30.4.2 ctype [Seite 886]
7.6.4.3 - 30.4.3 numeric [Seite 888]
7.6.4.4 - 30.4.4 monetary [Seite 889]
7.6.4.5 - 30.4.5 time [Seite 892]
7.6.4.6 - 30.4.6 messages [Seite 894]
7.6.5 - 30.5 Konstruktion eigener Facetten [Seite 896]
7.7 - 31 String [Seite 898]
7.7.1 - 31.1 string_view für String-Literale [Seite 908]
7.8 - 32 Speichermanagement [Seite 910]
7.8.1 - 32.1 unique_ptr [Seite 910]
7.8.1.1 - 32.1.1 make_unique [Seite 912]
7.8.2 - 32.2 shared_ptr [Seite 913]
7.8.2.1 - 32.2.1 make_shared [Seite 914]
7.8.2.2 - 32.2.2 Typumwandlung in einen Oberklassentyp [Seite 914]
7.8.3 - 32.3 weak_ptr [Seite 915]
7.8.4 - 32.4 new mit Speicherortangabe [Seite 916]
7.9 - 33 Numerische Arrays (valarray) [Seite 918]
7.9.1 - 33.1 Konstruktoren [Seite 919]
7.9.2 - 33.2 Elementfunktionen [Seite 919]
7.9.3 - 33.3 Binäre Valarray-Operatoren [Seite 922]
7.9.4 - 33.4 Mathematische Funktionen [Seite 924]
7.9.5 - 33.5 slice und slice_array [Seite 925]
7.9.6 - 33.6 gslice und gslice_array [Seite 928]
7.9.7 - 33.7 mask_array [Seite 931]
7.9.8 - 33.8 indirect_array [Seite 932]
7.10 - 34 Ausgewählte C-Header [Seite 934]
7.10.1 - 34.1
7.10.2 - 34.2
7.10.3 - 34.3
7.10.4 - 34.4
7.10.5 - 34.5
7.10.6 - 34.6
7.10.7 - 34.7
8 - A Anhang [Seite 942]
8.1 - A.1 ASCII-Tabelle [Seite 942]
8.2 - A.2 C++-Schlüsselwörter [Seite 944]
8.3 - A.3 Compilerbefehle [Seite 945]
8.4 - A.4 Rangfolge der Operatoren [Seite 946]
8.5 - A.5 C++-Attribute für den Compiler [Seite 947]
8.6 - A.6 Lösungen zu den Übungsaufgaben [Seite 948]
8.7 - A.7 Installation der Software für Windows [Seite 958]
8.7.1 - A.7.1 Installation des Compilers und der Entwicklungsumgebung [Seite 958]
8.7.2 - A.7.2 Integrierte Entwicklungsumgebung einrichten [Seite 959]
8.7.3 - A.7.3 De-Installation [Seite 959]
8.8 - A.8 Installation der Software für Linux [Seite 960]
8.8.1 - A.8.1 Installation des Compilers [Seite 960]
8.8.2 - A.8.2 Installation von Boost [Seite 961]
8.8.3 - A.8.3 Installation und Einrichtung von Code::Blocks [Seite 961]
8.8.4 - A.8.4 Beispieldateien entpacken [Seite 962]
8.9 - A.9 Installationshinweise für OS X [Seite 962]
8.9.1 - A.9.1 Installation von Boost [Seite 962]
8.9.2 - A.9.2 Beispieldateien entpacken [Seite 963]
9 - Glossar [Seite 964]
10 - Literaturverzeichnis [Seite 974]
11 - Register [Seite 978]
12 - 1001_1008_Breymann_5A_Anzeigen.pdf [Seite 1]
12.1 - CHV_Anz_Seite1001_Gloger_44723 [Seite 1002]
12.2 - CHV_Anz_Seite1001_Gloger_44723 [Seite 1003]
12.3 - CHV_Anz_Seite1003_Leopold_44343 [Seite 1004]
12.4 - CHV_Anz_Seite1003_Leopold_44343 [Seite 1005]
12.5 - CHV_Anz_Seite1005_FreundRücker_5A_45054 [Seite 1006]
12.6 - CHV_Anz_Seite1005_FreundRücker_5A_45054 [Seite 1007]
12.7 - CHV_Anz_Seite1007_Starke_7A_44361 [Seite 1008]
12.8 - CHV_Anz_Seite1007_Starke_7A_44361 [Seite 1009]
System requirements
File format: PDF
Copy protection: Watermark-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Use the free software Adobe Reader, Adobe Digital Editions, or any other PDF viewer of your choice (see eBook Help).
- Tablet/Smartphone (Android; iOS): Install the free app Adobe Digital Editions or another reading app for eBooks, e.g., PocketBook (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (only limited: Kindle).
The file format PDF always displays a book page identically on any hardware. This makes PDF suitable for complex layouts such as those used in textbooks and reference books (images, tables, columns, footnotes). Unfortunately, on the small screens of e-readers or smartphones, PDFs are rather annoying, requiring too much scrolling.
This eBook uses Watermark-DRM, a „soft” copy protection. This means that there are no technical restrictions to prevent illegal distribution. However, there is a personalised watermark embedded in the eBook that can be used to identify the purchaser of the eBook in the event of misuse and to provide evidence for legal purposes.
For more information, see our eBook Help page.