Skip to main content
main-content

Über dieses Buch

C++ hat sich in den letzten Jahren rasant entwickelt: C++11, C++14, C++17 und C++20 haben viele Verbesserungen und neue Möglichkeiten gebracht. Vieles, was vor 10 Jahren noch gut und empfehlenswert war, kann heute besser und sicherer gemacht werden.

Dieses Buch stellt C++ mit Visual Studio 2019 auf dem Stand von Mai 2020 umfassend dar. Das ist nicht nur der Umfang von C++17, sondern auch schon ein Teil von C++20.

Es entstand aus zahlreichen Vorlesungen und Firmenseminaren. Dementsprechend richtet es sich einerseits an Studierende, die C++ lernen wollen. Der Aufbau, die vielen Beispiele und Übungsaufgaben sind erprobt und bewährt. Es eignet sich zum Selbststudium und als Lehrbuch für Vorlesungen an Fachhochschulen und Universitäten.

Dieses Buch zeigt aber ebenso professionellen Software-Entwicklern mit einer jahre­langen C++-Praxis den aktuellen Stand der Technik. Viele der Spracherweiterungen machen elementare Programmiertechniken einfacher und sicherer. Dazu kommen neue Konzepte, die bessere und effizientere Lösun­gen als noch vor einigen Jahren ermöglichen. Das kann unnötigem Aufwand und Fehlern führen, die sich leicht vermeiden lassen. Viele dieser neuen Möglichkeiten haben sich in der industriellen Praxis noch nicht etabliert.

Dieses Buch erscheint in zwei weitgehend identischen Ausgaben:

– In der vorliegenden Ausgabe werden Programme geschrieben, in denen alle Ein- und Ausgaben über eine Windows-Benutzeroberfläche erfolgen.

– In der anderen Ausgabe „C++ mit Visual Studio 2019“ werden Programme ohne eine graphische Benutzeroberfläche geschrieben. Alle Ein- und Ausgaben erfolgen mit cin und cout über die Konsole.

Inhaltsverzeichnis

Frontmatter

Kapitel 1. Die Entwicklungsumgebung

Zusammenfassung
Visual Studio besteht aus verschiedenen Werkzeugen (Tools), die einen Programmierer bei der Entwicklung von Software unterstützen. Eine solche Zusammenstellung von Werkzeugen zur Softwareentwicklung bezeichnet man auch als Programmier- oder Entwicklungsumgebung.
Richard Kaiser

Kapitel 2. Steuerelemente für die Benutzeroberfläche

Zusammenfassung
Dieses Kapitel gibt einen Überblick über die wichtigsten Steuerelemente (Bedienelemente) für die Benutzeroberfläche von Windows-Programmen: Sie zeigen dem Anwender Informationen an oder nehmen Anweisungen und Informationen von ihm entgegen.
Richard Kaiser

Kapitel 3. Elementare Datentypen und Anweisungen

Zusammenfassung
Nachdem in den letzten beiden Kapiteln gezeigt wurde, wie man mit der Entwicklungsumgebung Visual Studio arbeitet, beginnen wir in diesem Kapitel mit der Vorstellung der Sprachelemente von C++.
Richard Kaiser

Kapitel 4. Die Stringklassen: string, wstring usw.

Zusammenfassung
In C und auch in vielen C++-Programmen werden Strings traditionellerweise mit nullterminierten Strings (Datentyp char*, siehe Abschnitt 7.6) dargestellt. Allerdings ist die Arbeit damit ziemlich umständlich und fehleranfällig. So kann man einen nullterminierten String nicht einfach mit dem Zuweisungsoperator „=“ auf einen anderen kopieren, und bei Funktionen wie strcpy muss man immer darauf achten, dass die Quelle auf einen nullterminierten String zeigt und im Zielbereich genügend Speicher reserviert ist.
Richard Kaiser

Kapitel 5. Arrays und Container

Zusammenfassung
Bisher haben wir alle Variablen einzeln definiert. Das kann aber ziemlich aufwendig werden, wenn man eine größere Anzahl von Variablen benötigt.
Richard Kaiser

Kapitel 6. Einfache selbstdefinierte Datentypen

Zusammenfassung
Selbstdefinierte Datentypen werden normalerweise mit Klassen definiert. Das ist allerdings ein umfangreiches Thema (siehe Kapitel 1). Damit auch schon vor Kapitel 1 einfache selbstdefinierte Datentypen verwendet werden können, werden hier einige einfache Grundbegriffe im Zusammenhang mit sogenannten Strukturen und Aufzählungstypen betrachtet.
Richard Kaiser

Kapitel 7. Zeiger, dynamisch erzeugte Variablen und smart pointer

Zusammenfassung
In den bisherigen Ausführungen wurden Speicherbereiche im Hauptspeicher immer über Variablen und ihre Namen angesprochen. Durch eine Definition wie.
Richard Kaiser

Kapitel 8. Überladene Funktionen und Operatoren

Zusammenfassung
Mit Funktionen können Anweisungen unter einem eigenen Namen zusammengefasst und unter diesem Namen wieder aufgerufen werden. Dieses einfache Konzept hat viele Vorteile.
Richard Kaiser

Kapitel 9. Objektorientierte Programmierung

Zusammenfassung
Bis ca. 1975 waren vordefinierte Datentypen wie int und double die überwiegend verwendeten Datentypen. Im Lauf der Zeit hat sich dann aber die Überzeugung durchgesetzt, dass bei komplexeren Aufgaben problemangemessene Datentypen besser sind. Da der Datentyp einer Variablen festlegt, welche Operationen mit dieser Variablen möglich sind, bietet ein problemangemessener Datentyp im Idealfall genau die Operationen, die für die Lösung des anstehenden Problems hilfreich sind.
Richard Kaiser

Kapitel 10. Namensbereiche

Zusammenfassung
Große Programme oder Bibliotheken können viele Namen enthalten. Dann kann es leicht vorkommen, dass derselbe Name für verschiedene globale Bezeichner (z.B. Namen für Datentypen, Klassen, Funktionen usw.) benötigt wird.
Richard Kaiser

Kapitel 11. Exception-Handling

Zusammenfassung
Die üblichen Kontrollstrukturen (if, while usw.) sind für die Steuerung eines normalen Programmablaufs angemessen und ausreichend. Sie führen allerdings schnell zu unübersichtlichen Programmstrukturen, wenn man damit Fehler abfangen will.
Richard Kaiser

Kapitel 12. Containerklassen der C++-Standardbibliothek

Zusammenfassung
Zum C++-Standard gehört eine umfangreiche Standardbibliothek. Fast 1400 der 1850 Seiten dieses Standards befassen sich allein mit dieser Bibliothek. Derjenige Teil der Standardbibliothek, der Container und Algorithmen umfasst, wird auch als Standard Template Library (STL) bezeichnet.
Richard Kaiser

Kapitel 13. Dateibearbeitung mit den Stream-Klassen

Zusammenfassung
Daten in einem Programm wurden bisher vor allem in Variablen dargestellt. Diese Variablen stellen Speicherbereiche im Hauptspeicher des Rechners dar, deren Reservierung am Ende des Programms wieder aufgehoben wird. Deshalb kann man danach nicht mehr auf die Daten zugreifen. Will man Daten über die Laufzeit eines Programms hinaus erhalten, müssen sie auf sogenannten externen Datenträgern gespeichert werden.
Richard Kaiser

Kapitel 14. Funktoren, Funktionsobjekte und Lambda-Ausdrücke

Zusammenfassung
Eine Klasse mit einem Aufrufoperator wird auch als Funktor bezeichnet, und ein Objekt einer solchen Klasse als Funktionsobjekt. Funktionsobjekte können wie Funktionen verwendet werden. Sie bieten aber zusätzliche Möglichkeiten und können oft einfacher als gewöhnliche Funktionen verwendet werden. Funktoren und Funktionsobjekte spielen in C++ und der Standardbibliothek eine große Rolle.
Richard Kaiser

Kapitel 15. Templates

Zusammenfassung
Templates sind Vorlagen für Funktionen oder Klassen, denen man als Parameter Datentypen übergeben kann. Aus einem Template und einem Argument für den Datentyp eines Parameters erzeugt der Compiler dann eine Funktion oder Klasse, die anstelle des Parameters das Argument als Datentyp enthält. Die Verwendung von Datentypen als Parameter bezeichnet man auch als generische Programmierung, und Templates werden auch als generische Funktionen bzw. Klassen, Schablonen oder Vorlagen bezeichnet.
Richard Kaiser

Kapitel 16. STL-Algorithmen und Lambda-Ausdrücke

Zusammenfassung
Die Standardbibliothek enthält über 100 Algorithmen für viele Aufgaben, die vor allem bei der Arbeit mit Containern immer wieder anfallen. Sie stehen nach
Richard Kaiser

Kapitel 17. Zeiten und Kalenderdaten mit chrono

Zusammenfassung
Zeiten und Kalenderdaten mit chrono. Seit C++11 steht in C++ nach #include chrono eine leistungsfähige Bibliothek für Zeitpunkte (z.B. Uhrzeiten), Zeiträume (z.B. 5 Sekunden) und Uhren zur Verfügung. Mit dieser Bibliothek kann man z.B. die aktuelle Uhrzeit anzeigen oder die Dauer der Ausführung von Anweisungen messen.“
Richard Kaiser

Kapitel 18. Smart Pointer: shared_ptr, unique_ptr und weak_ptr

Zusammenfassung
Die Arbeit mit Zeigern auf dynamisch erzeugte Speicherbereiche ist oft fehleranfällig.
Richard Kaiser

Kapitel 19. C++/CLI, .NET-Bibliotheken und C++ Interoperabilität

Zusammenfassung
Da ich immer mal wieder gefragt werde, ob und wie man C++ in Verbindung mit C#, .NET und .NET Core verwenden kann, hier eine kurze Einführung.
Richard Kaiser

Backmatter

Weitere Informationen

Premium Partner

    Bildnachweise