C++ mit Visual Studio 2017: Ein Fach- und Lehrbuch für Standard-C++

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Dieses Buch stellt C++ umfassend dar. Es ist ein Lehrbuch, das keine Vorkenntnisse voraussetzt. Die C++11/14-Erweiterungen sind von Anfang an integriert. Und es ist ein Fachbuch, das erfahrene C++-Programmierer auf den neuesten Stand bringt. Es zeigt die zahlreichen Neuerungen gegenüber früheren Versionen von C++ und Visual Studio. Viele Beispiele illustrieren, wie man diese vorteilhaft einsetzen kann. Die Inhalte sind in zahlreichen Vorlesungen und Industrieseminaren erprobt. Übungsaufgaben (mit Lösungen auf der Homepage des Autors) ermöglichen dem Leser, das Gelernte zu vertiefen.

 Dieses Buch erscheint in zwei weitgehend identischen Ausgaben:

  • In der vorliegenden Ausgabe werden reine Standard-C++-Programme geschrieben, d.h. ohne grafische Benutzeroberfläche. Alle Ein- und Ausgaben erfolgen über die Konsole.
  • In der weiteren Ausgabe „C++ mit Visual Studio 2017 und Windows Forms-Anwendungen“ (ISBN 978-3-662-49790-6) werden Programme mit einer grafischen Benutzeroberfläche geschrieben. Alle Ein- und Ausgaben erfolgen über eine Windows-Benutzeroberfläche. Diese Programme sehen etwas ansprechender aus als Konsolenprogramme. Das kann Anfängern den Einstieg erleichtern.

Author(s): Richard Kaiser
Series: Xpert.press
Edition: 1
Publisher: Springer Vieweg
Year: 2018

Language: German
Pages: 840
City: Berlin
Tags: C++-Programmierung; C++11; C++14; Objektorientierte Programmierung mit C++; Standard Template Library; STL; Microsoft Visual Studio 2015; Software Engineering; C++ Programming; Object-Oriented Programming With C++

Vorwort
Inhalt
1 Die Entwicklungsumgebung
1.1 Installation von Visual Studio für C++ Projekte
1.2 Ein erstes C++-Projekt
1.2.1 Ein Projekt für ein Standard-C++-Programm anlegen
1.2.2 Ein- und Ausgaben über die Konsole
1.2.3 Fehler beim Kompilieren
1.2.4 Den Quelltext auf Header-Dateien aufteilen
1.2.5 Ein Projekt für die Lösung der Übungsaufgaben
1.2.6 An einem Projekt weiterarbeiten
1.2.7 Der Start des Compilers von der Kommandozeile Ө
1.3 Der Quelltexteditor
1.3.1 Tastenkombinationen
1.3.2 Intellisense
1.3.3 Die Formatierung des Quelltexts
1.3.4 Definitionen einsehen
1.3.5 Symbole suchen
1.3.6 Namen umbenennen
1.3.7 Zeichenfolgen suchen und ersetzen
1.4 Kontextmenüs und Symbolleisten
1.5 Die Online-Hilfe (MSDN Dokumentation)
1.5.1 Hilfe mit F1 in Visual Studio
1.5.2 Die MSDN-Dokumentation im Internet
1.6 Projekte und der Projektmappen-Explorer
1.6.1 Projekte, Projektdateien und Projektoptionen
1.6.2 Projektmappen und der Projektmappen-Explorer
1.7 Weiterführende Möglichkeiten Ө
1.7.1 Navigieren
1.7.2 Code-Ausschnitte
1.7.3 Aufgabenliste
1.7.4 Der Objektkatalog und die Klassenansicht Ө
1.7.5 Die Fenster von Visual Studio anordnen Ө
1.7.6 Einstellungen für den Editor Ө
1.8 Bereitstellung (Deployment) Ө
2 Elementare Datentypen und Anweisungen
2.1 Syntaxregeln
2.2 Variablen und Bezeichner
2.3 Ganzzahldatentypen
2.3.1 Die interne Darstellung von Ganzzahlwerten
2.3.2 Ganzzahlliterale und ihr Datentyp
2.3.3 Typ-Inferenz: Implizite Typzuweisungen mit auto
2.3.4 Zuweisungen und Standardkonversionen bei Ganzzahlausdrücken
2.3.5 Operatoren und die „üblichen arithmetischen Konversionen“
2.3.6 Die Datentypen char und wchar_t
2.3.7 Der Datentyp bool
2.4 Kontrollstrukturen und Funktionen
2.4.1 Die if- und die Verbundanweisung
2.4.2 Die for-, die while- und die do-Schleife
2.4.3 Funktionen und der Datentyp void
2.4.4 Eine kleine Anleitung zum Erarbeiten der Lösungen
2.4.5 Werte- und Referenzparameter
2.4.6 Die Verwendung von Bibliotheken und Namensbereichen
2.4.7 Zufallszahlen
2.4.8 Default-Argumente
2.4.9 Programmierstil für Funktionen
2.4.10 Rekursive Funktionen
2.4.11 Die switch-Anweisung Ө
2.4.12 Die Sprunganweisungen goto, break und continue Ө
2.4.13 Assembler-Anweisungen Ө
2.5 Gleitkommadatentypen
2.5.1 Die interne Darstellung von Gleitkommawerten
2.5.2 Der Datentyp von Gleitkommaliteralen
2.5.3 Standardkonversionen
2.5.4 Mathematische Funktionen
2.6 Der Debugger, Tests und Ablaufprotokolle
2.6.1 Der Debugger
2.6.2 Der Debugger – Weitere Möglichkeiten Ө
2.6.3 Systematisches Testen
2.6.4 Unittests: Funktionen, die Funktionen testen
2.6.5 Ablaufprotokolle
2.6.6 Symbolische Ablaufprotokolle
2.7 Konstanten
2.7.1 Laufzeitkonstanten mit const
2.7.2 Compilezeit-Konstanten mit constexpr
2.7.3 constexpr Funktionen Ө
2.8 Kommentare
2.8.1 Kommentare zur internen Dokumentation
2.8.2 Kommentare und Intellisense
2.8.3 Dokumentationskommentare für externe Programme Ө
2.9 Exception-Handling Grundlagen: try, catch und throw
2.10 Namensbereiche – Grundlagen
2.11 Präprozessoranweisungen
2.11.1 Die #include-Anweisung
2.11.2 Makros Ө
2.11.3 Bedingte Kompilation
2.11.4 Pragmas Ө
3 Die Stringklassen: string, wstring usw.
3.1 Die Definition von Variablen eines Klassentyps
3.2 Einige Elementfunktionen der Klasse string
3.3 Raw-String-Literale (Rohzeichenfolgen)
3.4 Konversionen zwischen string/wstring und elementaren Datentypen
3.5 Konversionen zwischen string und Klassen mit Stringstreams Ө
3.6 Unicode-Strings Ө
3.7 Landespezifische Einstellungen Ө
3.8 Reguläre Ausdrücke Ө
4 Arrays und Container
4.1 Synonyme für Datentypen
4.1.1 Einfache typedef-Deklarationen
4.1.2 Synonyme für Datentypen mit using
4.2 Eindimensionale Arrays
4.3 Die Initialisierung von Arrays bei ihrer Definition
4.4 Arrays als Container
4.5 Mehrdimensionale Arrays Ө
4.6 Dynamische Programmierung Ө
5 Einfache selbstdefinierte Datentypen
5.1 Mit struct definierte Klassen
5.2 Aufzählungstypen
5.2.1 Schwach typisierte Aufzählungstypen (C/C++03)
5.2.2 enum Konstanten und Konversionen Ө
5.2.3 Stark typisierte Aufzählungstypen (C++11)
6 Zeiger, Strings und dynamisch erzeugte Variablen
6.1 Die Definition von Zeigervariablen
6.2 Der Adressoperator, Zuweisungen und generische Zeiger
6.3 Ablaufprotokolle für Zeigervariable
6.4 Dynamisch erzeugte Variablen
6.4.1 new und delete
6.4.2 Der Unterschied zu „gewöhnlichen“ Variablen
6.4.3 Memory Leaks in Visual C++ finden Ө
6.5 Dynamische erzeugte eindimensionale Arrays
6.6 Arrays, Zeiger und Zeigerarithmetik
6.7 Arrays als Funktionsparameter Ө
6.8 Funktionszeiger und Datentypen für Funktionen Ө
6.9 Konstante Zeiger
6.10 Stringliterale, nullterminierte Strings und char-Zeiger
6.11 Verkettete Listen
6.12 Binärbäume Ө
6.13 Zeiger als Parameter Ө
6.14 C-Bibliotheksfunktionen in string.h für nullterminierte Strings Ө
7 Überladene Funktionen und Operatoren
7.1 Inline-Funktionen Ө
7.2 Überladene Funktionen
7.2.1 Funktionen, die nicht überladen werden können
7.2.2 Regeln für die Auswahl einer passenden Funktion
7.3 Überladene Operatoren mit globalen Operatorfunktionen
7.3.1 Globale Operatorfunktionen
7.3.2 Die Ein- und Ausgabe von selbst definierten Datentypen
7.4 Referenztypen, Werte- und Referenzparameter
7.4.1 Werteparameter
7.4.2 Referenztypen
7.4.3 Referenzparameter
7.4.4 Referenzen als Rückgabetypen
7.4.5 Konstante Referenzparameter
8 Objektorientierte Programmierung
8.1 Klassen
8.1.1 Datenelemente und Elementfunktionen
8.1.2 Der Gültigkeitsbereich von Klassenelementen
8.1.3 Datenkapselung: Die Zugriffsrechte private und public
8.1.4 Der Aufruf von Elementfunktionen und der this-Zeiger
8.1.5 Konstruktoren und Destruktoren
8.1.6 OO Analyse und Design: Der Entwurf von Klassen
8.1.7 Klassendiagramme
8.2 Klassen als Datentypen
8.2.1 Der Standardkonstruktor
8.2.2 Objekte als Klassenelemente und Elementinitialisierer
8.2.3 Initialisiererlisten
8.2.4 friend-Funktionen und –Klassen
8.2.5 Überladene Operatoren mit Elementfunktionen
8.2.6 Der Kopierkonstruktor
8.2.7 Der Zuweisungsoperator = für Klassen
8.2.8 Die Angaben =delete und =default
8.2.9 Konvertierende und explizite Konstruktoren Ө
8.2.10 Konversionsfunktionen mit und ohne explicit Ө
8.2.11 Statische Klassenelemente
8.2.12 Konstante Objekte und Elementfunktionen
8.2.13 Funktionen als Objekte und Parameter mit std::function
8.2.14 Delegierende Konstruktoren Ө
8.2.15 Klassen und Header-Dateien
8.3 Vererbung und Komposition
8.3.1 Die Elemente von abgeleiteten Klassen
8.3.2 Zugriffsrechte auf die Elemente von Basisklassen
8.3.3 Verdeckte Elemente
8.3.4 Konstruktoren, Destruktoren und implizit erzeugte Funktionen
8.3.5 OO Design: public Vererbung und „ist ein“-Beziehungen
8.3.6 OO Design: Komposition und „hat ein“-Beziehungen
8.3.7 Konversionen zwischen public abgeleiteten Klassen
8.3.8 Mehrfachvererbung und virtuelle Basisklassen
8.4 Virtuelle Funktionen, späte Bindung und Polymorphie
8.4.1 Der statische und der dynamische Datentyp
8.4.2 Virtuelle Funktionen in C++03
8.4.3 Virtuelle Funktionen mit override in C++11
8.4.4 Die Implementierung von virtuellen Funktionen: vptr und vtbl
8.4.5 Virtuelle Konstruktoren und Destruktoren
8.4.6 Virtuelle Funktionen in Konstruktoren und Destruktoren
8.4.7 OO-Design: Einsatzbereich und Test von virtuellen Funktionen
8.4.8 OO-Design und Erweiterbarkeit
8.4.9 Rein virtuelle Funktionen und abstrakte Basisklassen
8.4.10 OO-Design: Virtuelle Funktionen und abstrakte Basisklassen
8.4.11 Objektorientierte Programmierung: Zusammenfassung
8.5 R-Wert Referenzen und Move-Semantik
8.5.1 R-Werte und R-Wert Referenzen
8.5.2 move-Semantik und std::move
8.5.3 Move-Semantik in der C++11 Standardbibliothek
8.5.4 Move-Semantik für eigene Klassen
9 Namensbereiche
9.1 Die Definition von Namensbereichen
9.2 Die Verwendung von Namen aus Namensbereichen
9.3 Header-Dateien und Namensbereiche
9.4 Aliasnamen für Namensbereiche Ө
10 Exception-Handling
10.1 Die try-Anweisung
10.2 Exception-Handler und Exceptions der Standardbibliothek
10.3 throw-Ausdrücke und selbst definierte Exceptions
10.4 Fehler und Exceptions
10.5 Die Freigabe von Ressourcen bei Exceptions: RAII
10.6 Exceptions in Konstruktoren und Destruktoren
10.7 noexcept
10.8 Die Exception-Klasse system_error Ө
11 Containerklassen der C++-Standardbibliothek
11.1 Sequenzielle Container der Standardbibliothek
11.1.1 Die Container-Klasse vector
11.1.2 Iteratoren
11.1.3 Geprüfte Iteratoren (Checked Iterators)
11.1.4 Die bereichsbasierte for-Schleife
11.1.5 Iteratoren und die Algorithmen der Standardbibliothek
11.1.6 Die Speicherverwaltung bei Vektoren Ө
11.1.7 Mehrdimensionale Vektoren Ө
11.1.8 Die Container-Klassen list und deque
11.1.9 Gemeinsamkeiten und Unterschiede der sequenziellen Container
11.1.10 Die Container-Adapter stack, queue und priority_queue Ө
11.1.11 Container mit Zeigern
11.1.12 std::array - Array Container fester GrößeӨ
11.2 Assoziative Container
11.2.1 Die Container set und multiset
11.2.2 Die Container map und multimap
11.2.3 Iteratoren der assoziativen Container
11.2.4 Ungeordnete Assoziative Container (Hash-Container)
12 Dateibearbeitung mit den Stream-Klassen
12.1 Stream-Variablen, ihre Verbindung mit Dateien und ihr Zustand
12.2 Fehler und der Zustand von Stream-Variablen
12.3 Lesen und Schreiben von Binärdaten mit read und write
12.4 Lesen und Schreiben mit den Operatoren << und >>
12.5 Dateibearbeitung im Direktzugriff Ө
12.6 Manipulatoren und Funktionen zur Formatierung von Texten Ө
13 Funktoren, Funktionsobjekte und Lambda-Ausdrücke
13.1 Der Aufrufoperator ()
13.2 Prädikate und Vergleichsfunktionen
13.3 Binder Ө
13.4 Lambda-Ausdrücke
13.5 Lambda-Ausdrücke – Weitere Konzepte Ө
13.5.1 Lambda-Ausdrücke werden zu Funktionsobjekten
13.5.2 Nachstehende Rückgabetypen
13.5.3 Generische Lambda-Ausdrücke
13.5.4 Lambda-Ausdrücke höherer Ordnung Ө
13.6 Kompatible function-Typen: Kovarianz und Kontravarianz Ө
14 Templates
14.1 Generische Funktionen: Funktions-Templates
14.1.1 Die Deklaration von Funktions-Templates mit Typ-Parametern
14.1.2 Spezialisierungen von Funktions-Templates
14.1.3 Funktions-Templates mit Nicht-Typ-Parametern
14.1.4 Explizit instanziierte Funktions-Templates Ө
14.1.5 Explizit spezialisierte und überladene Templates
14.1.6 Rekursive Funktions-Templates Ө
14.1.7 Variadische Templates
14.2 Generische Klassen: Klassen-Templates
14.2.1 Die Deklaration von Klassen-Templates mit Typ-Parametern
14.2.2 Spezialisierungen von Klassen-Templates
14.2.3 Klassen-Templates mit Nicht-Typ-Parametern
14.2.4 Explizit instanziierte Klassen-Templates Ө
14.2.5 Partielle und vollständige Spezialisierungen Ө
14.2.6 Vererbung mit Klassen-Templates Ө
14.2.7 Tupel mit Ө
14.2.8 Alias Templates Ө
14.3 Type Traits
14.3.1 Prüfungen bei der Kompilation: static_assert
14.3.2 type traits und static_assert
14.3.3 Eine Konstruktion von type traits
14.3.4 Die type traits Kategorien
14.3.5 type traits zur Steuerung der Übersetzung und Optimierung
14.4 Typ-Inferenz
14.4.1 Implizite Typzuweisungen mit auto
14.4.2 Mit decltype den Datentyp eines Ausdrucks bestimmen
14.5 Kovarianz und Kontravarianz
15 STL-Algorithmen und Lambda-Ausdrücke
15.1 Iteratoren
15.1.1 Die verschiedenen Arten von Iteratoren
15.1.2 Umkehriteratoren
15.1.3 Einfügefunktionen und Einfügeiteratoren
15.1.4 Stream-Iteratoren
15.1.5 Container-Konstruktoren mit Iteratoren
15.1.6 Globale Iterator-Funktionen Ө
15.2 Lineares Suchen
15.3 Zählen
15.4 Der Vergleich von Bereichen
15.5 Suche nach Teilfolgen
15.6 Minimum und Maximum
15.7 Mit all_of, any_of, none_of alle Elemente in einem Bereich prüfen
15.8 Kopieren und Verschieben von Bereichen
15.9 Elemente transformieren und ersetzen
15.10 Elementen in einem Bereich Werte zuweisen Ө
15.11 Elemente entfernen – das erase-remove Idiom
15.12 Die Reihenfolge von Elementen vertauschen
15.12.1 Elemente vertauschen
15.12.2 Permutationen Ө
15.12.3 Die Reihenfolge umkehren und Elemente rotieren Ө
15.12.4 Elemente durcheinander mischen Ө
15.13 Algorithmen zum Sortieren und für sortierte Bereiche
15.13.1 Partitionen Ө
15.13.2 Bereiche sortieren
15.13.3 Binäres Suchen in sortierten Bereichen
15.13.4 Mischen von sortierten Bereichen
15.14 Numerische Berechnungen
15.14.1 Verallgemeinerte numerische Algorithmen
15.14.2 Valarrays Ө
15.14.3 Zufallszahlen mit Ө
15.14.4 Komplexe Zahlen Ө
15.14.5 Numerische Bibliotheken neben dem C++-Standard Ө
16 Zeiten und Kalenderdaten mit chrono
16.1 Brüche als Datentypen: Das Klassen-Template ratio
16.2 Ein Datentyp für Zeiteinheiten: duration
16.3 Datentypen für Zeitpunkte: time_point
16.4 Uhren: system_clock und steady_clock
17 Multithreading
17.1 Funktionen als Threads starten
17.1.1 Funktionen mit async als Threads starten
17.1.2 Funktionen mit thread als Threads starten
17.1.3 Lambda-Ausdrücke als Threads starten
17.1.4 Zuweisungen und move für Threads
17.1.5 Die Klassen future und promise
17.1.6 Exceptions in Threads und ihre Weitergabe mit promise
17.1.7 Der Programmablauf mit async
17.1.8 Informationen über Threads
17.1.9 Sleep-Funktionen
17.1.10 Threads im Debugger
17.2 Kritische Abschnitte
17.2.1 Atomare Datentypen
17.2.2 Kritische Bereiche mit mutex und lock_guard sperren
17.2.3 Weitere Lock-Klassen: unique_lock und shared_lock
17.2.4 Weitere Mutex-Klassen
17.2.5 Deadlocks
17.2.6 call_once zur Initialisierung von Daten
17.2.7 Thread-lokale Daten
17.3 Bedingungsvariablen zur Synchronisation von Threads
17.4 Die „Parallel Patterns Library“ von Microsoft
18 C++11 Smart Pointer: shared_ptr, unique_ptr und weak_ptr
18.1 Gemeinsamkeiten von unique_ptr und shared_ptr
18.2 unique_ptr
18.3 shared_ptr
18.4 Deleter Ө
18.5 weak_ptr Ө
19 Literaturverzeichnis
Index
C#/C++-Schulungen Workshops – Beratung – Coaching