Was ist C++?
C++ ist eine der beliebtesten und weitverbreitetsten Programmiersprachen, die in der modernen Softwareentwicklung eingesetzt werden, um eine Vielzahl unterschiedlicher Anwendungen zu entwickeln. Als Weiterführung der strukturierten C-Programmierung setzt die Programmiersprache auf ein objektorientiertes Modell.
Entwicklungsgeschichte und Eigenschaften von C++
Die Programmiersprache C++ ist weit verbreitet und wird vielfältig genutzt. Ursprünglich ist sie als eine Weiterentwicklung zu der Programmiersprache C entstanden. Aufgrund der engen Verwandtschaft der beiden Programmiersprachen ist es möglich, auch in C++ hardwareorientierte, effiziente und performante Anwendungen zu entwickeln. Die Programmiersprache ermöglicht es, ein reines objektorientiertes Paradigma zu benutzen, also mit Klassen, Objekten, Methoden und Attributen komplexe Konstrukte zu erstellen. Da es sich hierbei um eine sehr umfangreiche Sprache handelt, ist es empfehlenswert, zunächst mit den Grundkonstrukten (Datentypen, Operatoren, Kontrollstrukturen) zu starten.
Die unterschiedlichen Versionen des Programms im Überblick
Die Programmiersprachen C++ wurde im Jahr 1979 von dem dänischen Informatiker Bjarne Stroustrup entwickelt. Im Laufe der Jahre wurde die Sprache kontinuierliche weiterentwickelt und durch neue Funktionalitäten und Features erweitert. Im Jahr 1998 wurde die standardisierte Version mit der Bezeichnung C++98 veröffentlicht. Weitere neue Funktionen und Verbesserungen wurden mit den Standards 03, 11, 14 und 17 in den Jahren 2003, 2011, 2014 und 2017 eingeführt. An der Version 20 wird schon mit Hochdruck gearbeitet.
Entwickler, die mit C++ arbeiten möchten, sollten unbedingt eine IDE (Integrated Development Environment) nutzen, die volle Unterstützung für den 11-Standard bietet. Bekannte und weitverbreitete IDEs für C++ sind:
– NetBeans
– Eclipse
– Xcode
Optionale Objektorientierung
Entwickler werden bei C++ nicht dazu gezwungen, ein bestimmtes Programmierparadigma befolgen zu müssen. So wird beispielsweise Objektorientierung weder vorausgesetzt noch erzwungen. Sie können auch rein imperativen Code schreiben, der von einem C-Compiler akzeptiert wird. Dies hat sich im Laufe der Jahre als wesentlicher Vorteil für die Verbreitung der Sprache erwiesen und ermöglicht, performante und effiziente Anwendungen zu entwickeln. Im Gegensatz zu traditionellen objektorientierten Sprachen, wie zum Beispiel Java oder C#, können Programmierer mit C++ eine mehrfache Vererbung (multiple Inheritance) realisieren. Konkret bedeutet das, dass eine Klasse mehr als eine Basisklasse haben kann. Im Folgenden gehen wir auf ein Beispiel für Vererbung in C++ im Detail ein:
Um ein Gesellschaftsspiel zu entwickeln, benötigen Sie u. a. Klassen für Kugelschreiber, Geldstücke und die Basisklasse.
– Den Würfel können Sie mittels eines Zufallsgenerators realisieren. Zu diesem Zweck existiert in C++ bereits die nötige Basisklasse „RandomNumberGenerator“, von der die Klasse alle Methoden und Attribute erbt.
– Für den Kugelschreiber können Sie einen Binärzähler benutzen. Die angemessene Basisklasse wäre hierfür „BinaryCounter“.
– Die Geldstücke sind ein Zahlungsmittel und erben von der Basisklasse „Currency“. Sie können die Gelstücke aber auch als Binärzähler definieren (Zahl = Null, Kopf = Eins).
Java, C#, C++
In traditionellen objektorientierten Programmiersprachen, wie beispielsweise Java oder C# muss sich der Entwickler für eine Basisklasse entscheiden. Zusätzliche Vererbungen kann nur durch den Einsatz von Interfaces realisieren, die ausschließlich abstrakte Funktionen enthalten können. Wie bereits C bietet C++ die Unterstützung für Makros und ein performantes generisches Programmierparadigma mittels Templates. Generische Programmierung gibt Entwicklern die Möglichkeit, einen parametrischen Polymorphismus einzusetzen, der das Überladen mit gleichnamigen Funktionen mit unterschiedlichen Argumenten ermöglicht.
Benutzeroberfläche und Bibliotheken
Es sind zahlreiche Bibliotheken erhältlich, welche die bereits sehr umfangreiche Funktionsvielfalt von C++ noch zusätzlich erweitern. So sind beispielsweise für die Entwicklung von Anwendungen mit Benutzeroberflächen und Zugriff auf Datenbanken verschiedene Bibliotheken erhältlich. Die bekannteste und beliebteste ist die Bibliothek Qt mit der dazugehörigen IDE Qt-Creator. Seit der Version 5.7, die im Juni 2016 veröffentlicht wurde, bietet Qt volle Unterstützung für C++ 11. Obwohl Qt primär mit C++ genutzt wird, kann die IDE auch mit anderen Programmiersprachen wie Python genutzt werden.
In Qt kommt die sogenannte ereignisorientierte Programmierung zum Einsatz. Auf den Benutzeroberflächen sind Steuerungselemente (Widgets) platziert, mit deren Hilfe der Nutzer die Anwendung bedient. Bei einem Ereignis handelt es sich zum Beispiel um einen Klick auf eine Schaltfläche oder die Auswahl eines Eintrags. Bei diesem Vorgang gibt es ein Signal, welches mit einem Slot verbunden sein kann. Dabei handelt es sich in den meisten Fällen um eine Funktion, deren Code aufgrund des Ereignisses aufgerufen wird.
Sprachdesign des Programms
Bei C++ kommen nur etwa 60 Schlüsselwörter zum Einsatz, die den sogenannten „Sprachkern“ bilden. Die eigentliche Funktionalität wird der Sprache durch ihre Standardbibliothek verliehen. Diese bringt der Sprache wichtige Funktionalitäten bei, wie beispielsweise Arrays, Listen oder Vektoren, und stellt die Verbindungen zum Betriebssystem dar (iostream, fstream, …). Je nach Einsatzgebiet kann man die Programmiersprache durch den Einsatz zusätzlicher Bibliotheken erweiterten. Eine der wichtigsten Stärken der Programmiersprache liegt in der Kombination effizienter, maschinennaher Programmierung mit mächtigen Sprachmitteln, mit denen sich komplexe Implementierungsdetails weitestgehend zusammenfassen und hinter einer abstrakten und leicht verständlichen Befehlsfolge verbergen lassen.
Einige Designelemente der Sprache werden jedoch auch häufig kritisiert. So hat die Programmiersprache beispielsweise keine Garbage Collection.Man kann jedoch den Speicher manuell verwalten, was jedoch ein hohes Maß an Erfahrung voraussetzt. Denn eine fehlerhafte Speicherverwaltung kann schwerwiegende Folgen haben, die meist in Programmabstürzen und diversen ähnlichen Bugs enden.
- Über den Autor
- Aktuelle Beiträge
Daniel Faust ist Redakteur im Content-Team der Biteno und betreut den Blog der Biteno GmbH.