C++ ist eine der verbreitetsten und industriell bedeutendsten Programmiersprachen. Sie ist als Mehrzwecksprache konzipiert und unterstützt insbesondere effiziente und maschinennahe Programmierung, Datenabstraktion sowie objektorientierte und generische Programmierung.
C++ basiert auf der Programmiersprache C wie in ISO/IEC 9899:1990 beschrieben. Zusätzlich zu den in C vorhandenen Möglichkeiten bietet C++ weitere Datentypen, Klassen mit Vererbung und virtuellen Funktionen, Ausnahmebehandlung, Templates (Schablonen), Namensräume, Inline-Funktionen, Überladen von Operatoren und Funktionsnamen, Referenzen, Operatoren zur Freispeicherverwaltung und mit der C++-Standardbibliothek eine erweiterte Bibliothek.
Als Stroustrup in den Bell-Laboratorien zu arbeiten begann, sah er sich mit dem Problem konfrontiert, den UNIX-Betriebssystemkern im Hinblick auf verteilte Programmierung analysieren zu müssen. Mit den Erfahrungen aus seiner Promotion machte er sich daran, die Programmiersprache C um ein Klassenkonzept zu erweitern, für das die Sprache Simula-67 das primäre Vorbild war.
Die Wahl fiel auf die Programmiersprache C, weil C eine Mehrzwecksprache war, schnellen Code produzierte und einfach auf andere Plattformen zu portieren war. Als dem Betriebssystem UNIX beiliegende Sprache hatte C außerdem eine nicht unerhebliche Verbreitung. Zunächst fügte er der Sprache Klassen (mit Datenkapselung) hinzu, dann abgeleitete Klassen, ein strengeres Typsystem, Inline-Funktionen und Standard-Argumente.
Während Stroustrup „C mit Klassen“ („C with Classes“) entwickelte (woraus später C++ wurde), schrieb er auch cfront, einen Compiler, der aus C mit Klassen zunächst C-Code als Zwischenresultat erzeugte. Die erste kommerzielle Version von cfront erschien im Oktober 1985.
1982 wurde C mit Klassen in C++ umbenannt. Erweiterungen darin waren: virtuelle Funktionen, Überladen von Funktionsnamen und Operatoren, Referenzen, Konstanten, änderbare Freispeicherverwaltung und eine verbesserte Typüberprüfung. Die Möglichkeit von Kommentaren, die an das Zeilenende gebunden sind, wurde wieder aus BCPL übernommen (//).
1985 erschien die erste Version von C++, die eine wichtige Referenzversion darstellte, da die Sprache damals noch nicht standardisiert war. 1989 erschien die Version 2.0 von C++. Neu darin waren Mehrfachvererbung, abstrakte Klassen, statische Elementfunktionen, konstante Elementfunktionen und die Erweiterung des Schutzmodells um protected. 1990 erschien das Buch The Annotated C++ Reference Manual, das als Grundlage für den darauffolgenden Standardisierungsprozess diente.
Relativ spät wurden der Sprache Templates, Ausnahmen, Namensräume, neuartige Typumwandlungen und boolesche Typen hinzugefügt.
Im Zuge der Weiterentwicklung der Sprache C++ entstand auch eine gegenüber C erweiterte Standardbibliothek. Erste Ergänzung war die Stream-I/O-Bibliothek, die Ersatz für traditionelle C-Funktionen wie zum Beispiel printf und scanf bietet. Eine der wesentlichen Erweiterungen der Standardbibliothek kam später durch die Integration großer Teile der bei HP entwickelten Standard Template Library (STL) hinzu.
Nach jahrelanger Arbeit wurde schließlich 1998 von der ISO die endgültige Fassung der Sprache C++ (ISO/IEC 14882:1998) genormt.
2003 wurde die erste überarbeitete Version von ISO/IEC 14882:1998 verabschiedet (ISO/IEC 14882:2003). Diese Revision ist lediglich eine Nachbesserung der Norm ISO/IEC 14882:1998 und sollte nicht mit der in Arbeit befindlichen Version verwechselt werden. Die nächste Version der Sprache C++ erscheint voraussichtlich noch in dieser Dekade. (s. in der Entwicklung befindliche Version)
C++ ist somit eine so genannte „Multiparadigmen-Sprache“, die dem Programmierer sehr viele Freiheiten lässt.
Siehe auch: Programmierparadigma, Entwurfsmuster, RAII
#include
Die C++-ISO-Norm schreibt vor, dass das Ergebnis von main vom Typ int sein muss. Ein Programm, bei dem das Ergebnis von main nicht vom Typ int ist, ist kein gültiges Programm im Sinne der C++-ISO-Norm (ISO-14882).
Die Funktion main ist die einzige Funktion, die – obwohl sie einen Wert zurückgibt – nicht die Anweisung „return“ benötigt. Ohne die explizite Anweisung return gibt main den Wert 0 zurück.
Die Kompatibilität mit C war eines der Hauptdesignziele bei der Entwicklung der Programmiersprache C++. Grund dafür war die große Verbreitung von C. C-Compiler sind auch heute noch für praktisch jeden Prozessor verfügbar. Deswegen gilt die Kompatibilität mit C immer noch als eine der wichtigsten Eigenschaften von C++.
Im Laufe der Entwicklung der beiden Sprachen gab es auch Rückwirkungen von C++ auf C. Beispielsweise wurden in C const sowie die Funktionsprototypen von C++ übernommen.
Die letzten Änderungen an C fanden 1999 statt (ISO/IEC 9899:1999). Gemäß dem Ratifizierungsjahr 1999 spricht man, wenn man sich auf diesen C-Stand bezieht, deshalb auch von 1999. Ein Beispiel für darin eingeführte Spracherweiterungen sind die so genannten VLAs (engl. variable length array).
Aufgrund dieser Weiterentwicklung von C gibt es theoretisch mehr Inkompatibilitäten zwischen C und C++. Mittlerweile unterstützen viele Compiler diesen neuen Stand C99 in der Sprachdefinition und nicht ganz so viele auch in der Bibliothek, so dass die Bedeutung dieser Unterschiede zwischen C und C++ zunimmt. Bei der in Arbeit befindlichen C++-Version wird u. a. daran gearbeitet, die neuen C99-Merkmale mit einzuarbeiten. Einige C++-Compiler unterstützen C99-Neuerungen schon jetzt (z. B. der gcc).
Die Programmiersprachen Java und C# haben eine ähnliche, ebenfalls an C angelehnte Syntax wie C++, sind auch objektorientiert und unterstützen Typparameter, weshalb ein Vergleich mit ihnen besonders naheliegend ist.
Siehe auch: Simula, Smalltalk, Vergleich objektorientierter Programmiersprachen
export“.
Ein weiterer Grund für die Zersplitterung der Sprache ist die lange Benutzung. C++ wurde in der Phase, in der die Sprache die größte Entwicklung erlebte, bereits sehr intensiv eingesetzt. Dies sorgte dafür, dass viele Entwickler nicht oder nur unzureichend mit neueren Eigenschaften der Sprache vertraut sind oder diese auf Grund von alten Compilern nicht einsetzen konnten. Daher sind viele Projekte, die in C++ entwickelt wurden, nicht auf dem aktuellen Stand der C++ Programmierung und sogar inkompatibel zu den aktuellen C++-Normen.
Auch der Stand vieler Lehrbücher und Lehrveranstaltungen ist veraltet. Da sich einige Compiler, wie der GCC, der C++-Sprachdefinition immer mehr annähern, stimmen Lehrinhalte oft nicht mit der Realität existierender Compiler überein.
| Compiler | Kommentar | Mit spezieller IDE | Plattform | - | g++ | Bestandteil der GCC; setzt ab Version 3.4 die Sprache C++ nahezu vollständig um; Freie Software | Nein | Unix, Linux, Mac OS X, Windows (dort auch als MinGW), AmigaOS | - | Intel C++ | Setzt C++ nahezu vollständig um; erzeugt hocheffizienten Code für Intel-Prozessoren; proprietär | Nein | Windows, Linux | - | Microsoft Visual C++ | Verbreitetster Compiler unter Windows; setzt ab der Version 7.1 die Sprache C++ nahezu vollständig um; proprietär; kostenlose Version mit Einschränkungen | Ja | Windows | - | Borland C++ Builder | proprietär (eine ältere Version ist kostenlos ohne IDE verfügbar) | Ja | Windows, Linux (Kylix) | - | Open Watcom | Auch Unterstützung älterer Plattformen, bisher noch ohne vollständige C++-Standardbibliothek; Open Source | Ja | DOS, Windows, OS/2, Netware (Linux-Unterstützung in Arbeit) | - | Comeau's C++ Compiler | Gilt als der Compiler, der C++ vollständig umsetzt; unterstützt zum Beispiel auch export von Templates; proprietär (kann über das Internet ausprobiert werden) | Nein | Windows, Linux, Solaris/SPARC |
|---|
Für Kommandozeilen-Compiler die keine spezielle integrierte Entwicklungsumgebung mitbringen, existieren eine große Zahl von unabhängigen Werkzeugen, die die Entwicklung sehr erleichtern. Eine Liste derer findet man im selbigen Artikel.
Siehe auch: Compiler, Visuelle Programmierumgebung
Programmiersprache C++ Programmiersprache
C++ | C++ | سي++ | Си плюс плюс | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | سیپلاسپلاس | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | C++ | ภาษาซีพลัสพลัส | C++ | C++ | C++ | C++