C++ ist eine Programmiersprache für allgemeine Anwendungen und 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, Ausnahmebehandlung, Templates (Schablonen), Namensräume, Inline-Funktionen, Überladen von Operatoren und Funktionsnamen, Referenzen, Operatoren zur Freispeicherverwaltung und eine erweiterte Bibliothek.
Entstehung
C++ wurde von Bjarne Stroustrup seit 1979 bei AT&T entwickelt, erste Anwendungen außerhalb der Forschung datieren vom Juli 1983, erste kommerzielle Systeme von 1985. Von einem einfachen "C mit Klassen", für das Simula-67 das primäre Vorbild war, entwickelte sich die Sprache von da an über mehrere Zwischenstufen zum heutigen, als weitgehend ausgereift geltenden Stand.
C++ ist seit 1998 von der ISO (ISO-14882) genormt. Die nächste ISO-C++-Norm wird voraussichtlich noch in dieser Dekade herausgegeben werden (C++0x).
Merkmale
Nach B. Stroustrup unterstützt C++ die folgenden Programmiertechniken:
- Prozedurale Programmierung
- Modulare Programmierung
- Strukturierte Programmierung
- Programmierung mit selbstdefinierten Datentypen (abstrakte Datentypen)
- Objektorientierte Programmierung
- Generische Programmierung mittels Templates.
Siehe auch: Programmierparadigma, Entwurfsmuster.
Stärken und Schwächen
Stärken:
- Die Erzeugung hocheffizienten Codes ist möglich.
- Sowohl maschinennahe als auch hochabstrakte Programmierung ist möglich.
- Für große Projekte geeignet.
- Weite Verbreitung
- Die Sprache ist nicht im Besitz einer Organisation (im Unterschied zu beispielsweise Java)
- Kompatibilität mit C - Vorteil: Es steht eine breite Codebasis zur Verfügung
Schwächen:
- Kompatibilität mit C - Nachteil: historischer Ballast muss mitgeschleppt werden, z.B. der von C übernommene Präprozessor oder die Speicherverwaltung, bei der jeder Programmierer von Hand Speicher anfordern und freigeben muss
- Die aktuellen Compiler (Stand: 2004) sind rückständig im Bezug auf die Umsetzung der ISO-Norm.
- Die aktuellen Compiler produzieren nicht immer optimalen Code, sowohl im Bezug auf Effizienz, als auch auf Code-Größe.
- Zum Erlernen sind verhältnismäßig lange Einarbeitungszeiten erforderlich.
- Die vorhandene C++-Standardbibliothek deckt viele wichtige Erfordernisse nicht ab, z.B. Threads, TCP/IP, Dateisystem-Verzeichnisse. Deshalb besteht in diesen Bereichen eine begrenzte Portabilität über Betriebssystemgrenzen hinweg.
Hallo-Welt-Programm in C++
Der folgende Quelltext stellt ein einfaches C++-Programm dar, das eine Meldung auf dem Standardausgabemedium ausgibt:
#include <iostream> int main() { std::cout << "Hallo Welt!" << std::endl; }
Erläuterungen:
Bei main handelt es sich um eine Funktion, genauer gesagt ist es die Hauptfunktion des gesamten Programmes. Die Funktion main ist in jedem C++-Programm vorhanden und wird nach dem Start des Programmes aufgerufen.
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).
Verwandtschaft mit C
C++ ist eine Erweiterung der Programmiersprache C gemäß dem Stand von 1990 (ISO/IEC 9899:1990, auch kurz C90 genannt). Es gab aber auch Rückwirkungen von C++ auf C, beispielsweise hat C die Funktionsprototypen von C++ übernommen.
Einige wenige C-Programme gemäß C90 lassen sich nicht ohne Weiteres als C++ kompilieren, bzw. haben als C++-Programme eine etwas andere Bedeutung. Dabei handelt es sich aber um Sonderfälle, die in der Praxis keine große Rolle spielen.
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 C99. Ein Beispiel für darin eingeführte Spracherweiterungen sind die sogenannten VLAs (engl. variable length array).
Unterschied zu anderen Sprachen
Die Programmiersprachen Java und C# haben eine ähnliche Syntax wie C++, sind aber "intern" anders aufgebaut. Java und C# sind praktisch nicht mehr kompatibel mit C.
Ein wesentlicher Unterschied zwischen diesen Sprachen und C++ besteht darin, dass C++ über generische Sprachmerkmale (Templates) verfügt. Es wird zwar bei Java und C# an generischen Spracherweiterungen gearbeitet (Stand: 2004), die Entwicklung geht dort aber in eine etwas andere Richtung als bei C++.
Gerade die generische Programmierung macht aber C++ zu einem mächtigen Programmierwerkzeug. Während die objektorientierte Programmierung in Java und C# als der Gipfel der vorhandenen Abstraktionsmechanismen angesehen wird, ist diese Art der Programmierung in C++ rückläufig. So werden tiefe Klassenhierarchieen vermieden, und zu Gunsten der Effizienz und der Minimierung des Ressourcenverbrauchs verzichtet man in vielen Fällen auf Polymorphie, dem Kernmechanismus der objektorientierten Programmierung.
Siehe auch: Simula, Objective-C, Smalltalk
C++-Entwicklungswerkzeuge
Compiler | Kommentar | Plattform |
---|---|---|
g++ | Kommandozeilencompiler; Bestandteil von GCC (GNU Compiler Collection) | Unix, Linux, MacOS X, Windows |
MinGW | Kommandozeilencompiler; g++ für Windows | Windows |
Intel C++ | Kommandozeilencompiler | Windows, Linux |
Comeau's C++ Compiler | Kommandozeilencompiler; unterstützt export von Templates | verschiedene Plattformen |
Microsoft Visual C++ | empfohlen: Version 7.1 oder neuer wegen höherer ISO-14882-Konformität als Vorgängerversionen | Windows |
Open Watcom | Kommandozeilencompiler | DOS, Windows, OS/2, Netware |
Borland C++ Builder | - | Windows |
Qt-Designer | - | Linux, Windows |
V C++ GUI | - | Linux |
GTKM | - | Linux |
DevCpp | Kostenlose Entwicklungsumgebung (IDE) | Windows |
KDevelop | Kostenlose Entwicklungsumgebung (IDE) für C++ und andere Sprachen | Linux |
Anjuta | Kostenlose Entwicklungsumgebung (IDE) | Linux |
Siehe auch: Kommandozeilen-Compiler, Visuelle Programmierumgebung
Literatur
- Bjarne Stroustrup: Die C++ Programmiersprache, Addison-Wesley, ISBN 3-8273-1660-X, das Standardwerk zu C++, Grundkenntnisse zu C von Vorteil; sehr empfehlenswert
- Andrew Koenig / Barbara E. Moo: Intensivkurs C++, Pearson Studium, ISBN 3-8273-7029-9, hervorragendes Anfängerbuch, ein gewisses Grundverständnis zu Programmierung von Vorteil; sehr empfehlenswert
- Scott Meyers: Effektiv C++ programmieren - 50 Wege zur Verbesserung ihrer Programme und Entwürfe, Addison-Wesley, ISBN 3-8273-1305-8, zur Vertiefung bereits vorhandener C++-Kenntnisse; sehr empfehlenswert
- Scott Meyers: Mehr Effektiv C++ programmieren - 35 neue Wege zur Verbesserung ihrer Programme und Entwürfe, Addison-Wesley, ISBN 3-8273-1275-2, Vertiefung vorhandener C++-Kenntnisse; sehr empfehlenswert
- Herb Sutter: Exceptional C++, ISBN 3-8273-1711-8 (deutsch), Vertiefung vorhandener C++-Kenntnisse; sehr empfehlenswert
- Andrei Alexandrescu: Modernes C++ Design, mitp, ISBN 3-8266-1347-3, das Standardwerk zur C++-Metaprogrammierung, setzt ein tiefes Verständnis von C++ voraus; sehr empfehlenswert
- Nicolai M. Josuttis: Objektorientiertes Programmieren in C++, Addison-Wesley, ISBN 3-8273-1771-1
- Stanley B. Lippman, Josee Lajoie: C++ Primer, mitp, ISBN 3-8266-0811-9
- Peter Prinz, Ulla Kirch-Prinz: C++ Lernen und professionell anwenden, mitp, ISBN 3-8266-0824-0
Weblinks
- Oft gestellte Fragen und Antworten, englisch
- C++-Diskussionsgruppe, deutsch
- Comeau's Online-Compiler, zum Kompilieren einfacher Programme
- ACCU, internationale Interessengemeinschaft für C und C++
- Internetseite des GNU-C++-Compilers
- C++ im Deutschen Software Entwickler Wiki
Weitere Artikel zum Thema C++
C++-Standardbibliothek, Templates (Schablonen), Schlüsselwörter der Programmiersprache C++, C++-Metaprogrammierung (siehe auch Metaprogrammierung). tokipona:toki pali Sipupu