Skip to main content
main-content

Über dieses Buch

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 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.

In der weiteren Ausgabe „C++ mit Visual Studio 2017“ (ISBN 978-3-662-49792-0) werden reine Standard-C++-Programme geschrieben, d.h. ohne grafische Benutzeroberfläche. Alle Ein- und Ausgaben erfolgen über die Konsole.

Inhaltsverzeichnis

Frontmatter

Kapitel 1. Die Entwicklungsumgebung

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

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

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.

In C und auch in vielen C++-Programmen werden Strings traditionellerweise mit nullterminierten Strings (Datentyp char*, siehe Abschnitt 7.10) 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

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

Selbstdefinierte Datentypen werden normalerweise mit Klassen definiert. Das ist allerdings ein umfangreiches Thema (siehe Kapitel 9). Damit auch schon vor Kapitel 9 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, Strings und dynamisch erzeugte Variablen

In den bisherigen Ausführungen wurden Speicherbereiche im Hauptspeicher immer über Variablen und ihre Namen angesprochen.

Richard Kaiser

Kapitel 8. Überladene Funktionen und Operatoren

Mit Funktionen können Anweisungen unter einem eigenen Namen zusammengefasst und unter diesem Namen wieder aufgerufen werden. Dieses einfache Konzept hat viele Vorteile:Mehrfach auszuführende Anweisungsfolgen können über einen Namen aufgerufen werden. Da man sie nicht jedes Mal ins Programm schreiben muss, spart das Schreibarbeit und man erhält kürzere, übersichtlichere Programme.Wenn Änderungen einer solchen mehrfach auszuführenden Anweisungsfolge notwendig werden, muss man sie nur einmal durchführen.Eine Programmiersprache kann um selbst definierte, problemangemessene Sprachelemente erweitert werden.Bei der Suche nach der Lösung eines komplexeren Problems kann man systematisch die Strategie der schrittweisen Verfeinerung anwenden. Dabei versucht man die Lösung eines Gesamtproblems dadurch zu finden, dass man es in einfachere Teilprobleme zerlegt, die dann isoliert gelöst werden. Diese Vorgehensweise ist die wohl wichtigste allgemeine Lösungsstrategie.Wenn man die Lösung jedes Teilproblems in einer Funktion zusammenfasst, wird die Struktur der Lösung explizit im Programm dokumentiert.

Richard Kaiser

Kapitel 9. Objektorientierte Programmierung

Bisher haben wir vor allem mit elementaren Datentypen wie int, double usw. gearbeitet. In den letzten 30 Jahren hat sich aber gezeigt, dass es bei komplexeren Aufgaben sehr hilfreich sein kann, problemangemessene Datentypen zu haben. Da der Datentyp festlegt, welche Operationen mit einer Variablen des Datentyps 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

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

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

Zum C++-Standard gehört eine umfangreiche Standardbibliothek. Fast 1000 der 1400 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

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. Das sind meist Magnetplatten (Festplatten), Magnetbänder, Speicherchips, optische Speichermedien (CD-ROMs, DVDs usw.) oder einfach Papier, auf dem Daten ausgedruckt werden.

Richard Kaiser

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

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

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

Die STL enthält über 100 Algorithmen für viele Aufgaben, die vor allem bei der Arbeit mit Containern immer wieder anfallen.

Richard Kaiser

Kapitel 17. 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. C++11 Smart Pointer: shared_ptr, unique_ptr und weak_ptr

Die Arbeit mit Zeigern auf dynamisch erzeugte Speicherbereiche ist oft fehleranfällig: Obwohl z.B. die beiden Funktionen.

Richard Kaiser

Kapitel 19. .NET mit C++ in Windows Forms verwenden

In Windows Forms Anwendungen kann man zahlreiche .NET Elemente ansprechen. Diese benötigen oft Argumente und Werte, die als .NET-Klassen mit ref class und nicht wie in Standard-C++ mit class definiert sind.

Richard Kaiser

Backmatter

Weitere Informationen

Premium Partner

Neuer Inhalt

BranchenIndex Online

Die B2B-Firmensuche für Industrie und Wirtschaft: Kostenfrei in Firmenprofilen nach Lieferanten, Herstellern, Dienstleistern und Händlern recherchieren.

Whitepaper

- ANZEIGE -

Best Practices für die Mitarbeiter-Partizipation in der Produktentwicklung

Unternehmen haben das Innovationspotenzial der eigenen Mitarbeiter auch außerhalb der F&E-Abteilung erkannt. Viele Initiativen zur Partizipation scheitern in der Praxis jedoch häufig. Lesen Sie hier  - basierend auf einer qualitativ-explorativen Expertenstudie - mehr über die wesentlichen Problemfelder der mitarbeiterzentrierten Produktentwicklung und profitieren Sie von konkreten Handlungsempfehlungen aus der Praxis.
Jetzt gratis downloaden!

Bildnachweise