Programmieren in C++: Einführung


Kapitel 1: Einführung


Inhaltsverzeichnis

Dieses Buch ist unter einer Creative Commons-Lizenz lizensiert.


1.1 C++ heute

Leistungsfähigkeit und Flexibilität

C++ stellt heute, zu Beginn des 21. Jahrhunderts, die wichtigste Programmiersprache für die Entwicklung leistungsfähiger Anwendungen dar. So ist C++ beispielsweise die am häufigsten verwendete Programmiersprache für die Entwicklung professioneller Anwendungen unter Microsoft Windows. Sehr viele weit verbreitete, erfolgreiche und unter Anwendern beliebte Programme sind in C++ entwickelt.

Als Gründe für die Beliebtheit von C++ unter Software-Entwicklern können die hohe Ausführungsgeschwindigkeit, große Flexibilität und einfache Bewältigung komplexer Aufgabensituationen genannt werden. Auch die Kompatibilität zur Programmiersprache C spielt eine entscheidende Rolle.

In den vergangenen zehn Jahren hat C++ durch Java und die .NET-Plattform starke Konkurrenz bekommen. Während bei Java eine hohe Portabilität im Vordergrund steht – also die Möglichkeit, ein Programm ohne Anpassung auf verschiedenen Betriebssystemen laufen zu lassen – ermöglicht die .NET-Plattform ein reibungsloses Zusammenspiel von Softwarekomponenten, die in völlig unterschiedlichen Programmiersprachen geschrieben sind. Die .NET-Plattform unterstützt zwar mit C++/CLI eine modifizierte Version von C++, um C++-Entwicklern die .NET-Plattform schmackhaft zu machen. C++ und C++/CLI sind dennoch unterschiedliche Programmiersprachen mit unterschiedlichen Zielen.

Ein wichtiger Bestandteil sowohl von Java als auch der .NET-Plattform und gleichzeitig ein entscheidender Unterschied zu C++ ist die virtuelle Maschine. Sie gaukelt einem Java- und .NET-Programm vor, auf einem in der Java- oder .NET-Spezifikation klar definierten Computer zu laufen. Java- und .NET-Programme laufen auf dieser virtuellen Maschine und greifen ausschließlich auf diese zu. Die virtuelle Maschine ist eine Zwischenschicht, die die Schnittstellen zum Betriebssystem und zur Hardware abstrahiert und quer über alle Computerkonfigurationen hinweg Java- und .NET-Programmen eine einheitliche Ausführungsumgebung zur Verfügung stellt. Java- und .NET-Programme wissen also grundsätzlich nicht, ob Ihr Computer einen Prozessor von Intel, AMD oder den eines anderen Herstellers besitzt. Sie müssen es auch nicht wissen, da sie lediglich auf der virtuellen Maschine laufen und nie direkt auf Ihren Prozessor zugreifen.

C++-Programme haben direkten Zugriff auf den Prozessor und profitieren daher grundsätzlich von einer hohen Ausführungsgeschwindigkeit: Der direkte Zugriff auf einen Prozessor ist im Allgemeinen schneller als der Zugriff auf eine virtuelle Maschine, die ihrerseits auf den Prozessor zugreifen muss. Der direkte Zugriff auf den Prozessor ermöglicht es Entwicklern außerdem, ein C++-Programm für einen Prozessor zu optimieren und einen zusätzlichen Geschwindigkeitsvorteil zu erreichen. Software, bei der es auf eine herausragende Performance ankommt, wird daher üblicherweise in C++ entwickelt.

C++ gilt als eine sehr flexible Programmiersprache, die mehrere Programmierparadigmen unterstützt. Unter Programmierparadigma versteht man eine bestimmte Sicht- und Herangehensweise an ein Problem. Programmierparadigmen sind Hilfsmittel, um Entwicklern das Lösen von Problemen zu erleichtern. Das bekannteste und heute am weitesten verbreitete Programmierparadigma ist die Objektorientierung. Sie ist auch das am häufigsten eingesetzte Programmierparadigma in C++. Dennoch können Sie auch ein C++-Programm ohne objektorientierte Konzepte erstellen. Die Objektorientierung wird Ihnen in C++ als ein Paradigma von vielen angeboten. So ist es mit C++ möglich, verschiedene Paradigmen in unterschiedlichen Komponenten der gleichen Software zu verwenden oder auch Paradigmen zu mischen. Weil kein Paradigma grundsätzlich besser oder schlechter ist als ein anderes und es von Fall zu Fall abhängt, welches Paradigma am sinnvollsten ist, bietet Ihnen C++ die freie Auswahl. Genaugenommen hängt die Auswahl eines Programmierparadigmas sogar vom Entwickler ab, da Entwickler sich bei gleicher Aufgabenstellung durchaus für unterschiedliche Paradigmen entscheiden können.

Neben der hohen Ausführungsgeschwindigkeit dank direktem Zugriff auf die Hardware und der Unterstützung verschiedener Programmierparadigmen zur Bewältigung unterschiedlicher Aufgabenstellungen ist die Kompatibilität zur Programmiersprache C von großer Bedeutung. C ist eine ältere Programmiersprache als C++, in der unglaublich viel Software entwickelt wurde und verfügbar ist. Darüberhinaus wird C als Systemprogrammiersprache zur Entwicklung zahlreicher Betriebssysteme inklusive Windows und Linux verwendet. Die hohe Kompatibilität zu C ermöglicht C++-Entwicklern den direkten Zugriff auf sämtlichen existierenden C-Code inklusive Betriebssystemfunktionen. Auf diese Weise können C++-Programme optimal mit ihrer Umgebung kommunizieren und in diese eingebettet werden.


1.2 Sprachabgrenzung

Was C++ ist und was nicht

C++ ist für den Programmieranfänger einfach nur der Name einer neuen Programmiersprache. Hinter dem Kürzel C++ können sich jedoch recht unterschiedliche Dinge verbergen, die ganz klar getrennt werden sollten, um im allgemeinen Sprachgebrauch zu wissen, was der andere meint.

Unter C++ versteht man erst einmal die Syntax und Semantik einer Programmiersprache. Das heißt, C++ definiert eine Reihe von Schlüsselwörtern und legt fest, welche Bedeutung die einzelnen Schlüsselwörter haben. Dies ist die eigentliche Definition einer Programmiersprache. In diesem Buch werden Sie genau diesen Grundwortschatz kennenlernen, aus dem C++ besteht. Das zweite Buch dieser Reihe mit dem Titel Programmieren in C++: Aufbau erklärt Ihnen dann, welche Regeln zu beachten sind, wenn Sie objektorientiert programmieren wollen.

C++ als Programmiersprache wurde vor langer Zeit von Bjarne Stroustrup basierend auf der Programmiersprache C entwickelt und ist schon lange de facto standardisiert. Das heißt, Sie können Ihr C++-Programm normalerweise mit jedem beliebigen C++-Compiler übersetzen - egal, von welchem Hersteller der Compiler stammt, egal, unter welchem Betriebssystem er läuft. Der Grundwortschatz ist nicht compiler- oder betriebssystemabhängig.

Seit 1998 gibt es einen offiziellen C++ Standard. Dieser Standard bezieht sich zum einen auf die Syntax und Semantik der Programmiersprache C++. Dies ist der eher uninteressantere Teil des Standards, weil hier eigentlich nur die bis dato bereits weit verbreitete und allgemeingültige Syntax von C++ von offizieller Seite bestätigt wurde. Es gibt zwar ein paar Neuheiten zum bisherigen de-facto-Standard, aber diese Erweiterungen halten sich in Grenzen und sind leicht überschaubar.

Der viel wichtigere Teil des Standards ist die C++-Standardbibliothek. In dieser Bibliothek sind nützliche Funktionen, Klassen und Objekte zusammengefasst und standardisiert worden, um diese Hilfsmittel allen C++-Programmierern in einheitlicher Form zur Verfügung zu stellen. Es handelt sich also bei dieser Bibliothek um eine Art Werkzeugkasten, auf den jeder C++-Programmierer in seinen Programmen zugreifen kann. In diesem Werkzeugkasten liegen Werkzeuge, die alle mit Hilfe von C++ entwickelt wurden. Der Standard selbst legt nun fest, was für Werkzeuge im Werkzeugkasten enthalten sein müssen, welche Funktion diese Werkzeuge haben, wie sie angewandt werden etc.

Sie als C++-Programmierer brauchen sich nicht der Standardbibliothek bedienen. Sie können Ihre Programme auch ohne diesen Werkzeugkasten erstellen. In der Praxis jedoch greift fast jedes C++-Programm auf Elemente der Standardbibliothek zu. Eine Programmierung ohne die Standardbibliothek würde oftmals bedeuten, dass Funktionen selber programmiert werden müssten, obwohl sie in der Standardbibliothek definiert sind. So müssen zum Beispiel viele Programme Dateien öffnen und lesen – die Standardbibliothek bietet entsprechende Hilfsmittel an, die Sie wiederverwenden können, ohne Betriebssystemfunktionen aufrufen und viele kleine Schritte selber machen zu müssen. Da kein C++-Programmierer das Rad neu erfinden will, was zeitaufwändig und fehleranfällig wäre, finden Sie daher kaum ein C++-Programm, das nicht auf Funktionen, Klassen und Objekte aus der Standardbibliothek zugreift.

Die Entwicklung der Standardbibliothek ist gleichzeitig ein Schritt in Richtung höherer Portabilität. Denn mit dieser Standardbibliothek kann auf jedem Betriebssystem auf ganz bestimmte Werkzeuge in C++-Programmen zugegriffen werden. Anstatt zum Beispiel auf jedem Betriebssystem andere Funktionen aufzurufen, um Dateien zu öffnen und zu lesen, können Sie auf die Standardbibliothek zugreifen, die bereits für das jeweilige Betriebssystem angepasst ist und weiß, wie mit Hilfe welcher Betriebssystemfunktionen Dateien zu öffnen und zu lesen sind.

Da der C++-Standard von einem internationalen Standardisierungsgremium überwacht und weiterentwickelt wird, wird verhindert, dass Unternehmen inkompatible Versionen von C++ entwickeln. Der C++-Standard hat heute eine so starke Stellung, dass er von keinem Unternehmen, das Entwicklungswerkzeuge zu C++ anbietet, ignoriert werden kann. Es kann daher erwartet werden, dass sich sämtliche Unternehmen nach dem C++-Standard richten. Da im Standardisierungsgremium viele unterschiedliche Interessen aufeinander treffen, schreitet die Entwicklung des C++-Standards aber nicht unbedingt schnell voran. Nachdem die erste Version 1998 veröffentlicht wurde, wird erwartet, dass die zweite Version 2010 verfügbar sein wird.

Da die Entwicklung von C++ in der Praxis schneller voranschreitet als der Standardisierungsprozess, wurde unter anderem von Mitgliedern des Standardisierungsgremiums Boost gegründet. Boost ist ein Tummelplatz im Internet von mehreren tausend C++-Entwicklern, die neue Bibliotheken entwickeln und gemeinschaftlich verbessern - mit dem Ziel, diese eines Tages in eine neue Version des C++-Standards zu integrieren. Die Entwicklung der Boost C++ Bibliotheken geht hierbei schneller voran als die Entwicklung des C++-Standards. Während der C++-Standard von 1998 zum Beispiel keinerlei Hilfsmittel zur Entwicklung von Netzwerkanwendungen bietet, gibt es eine entsprechende Netzwerk-Bibliothek bei Boost. Da sich Boost sehr stark am C++-Standard ausrichtet, sind die Boost C++ Bibliotheken im Allgemeinen auf einem sehr hohen Niveau. Da sie noch nicht standardisiert sind, können sie sich aber schneller ändern, was ein ständiges Lernen erfordert. In der Praxis sind die Boost C++ Bibliotheken ungemein wichtig, da der C++-Standard von 1998 zu alt ist, um für alle Aufgabenstellungen in der heutigen Softwareentwicklung bereits fertige Lösungen bieten zu können. Das Buch Die Boost C++ Bibliotheken stellt verschiedene Boost C++ Bibliotheken vor, die in der heutigen Softwareentwicklung eigentlich unverzichtbar sind und wichtige Erweiterungen des C++-Standards darstellen.


1.3 Vom Quellcode zum Maschinencode

Kompilieren und Linken

Um ein C++-Programm zu schreiben, wird der Quellcode einfach in einer Text-Datei (genauer ASCII-Datei) gespeichert. Ein einfacher Text-Editor, wie er beispielsweise standardmäßig unter Windows installiert ist, reicht zum Schreiben von C++ aus. Wie Sie eventuell aus dem Buch Allgemeine Grundlagen der Programmierung wissen, können vom Programmierer geschriebene Quellcodes aber nicht automatisch vom Computer ausgeführt werden. Während der Programmierer Quellcode schreiben und lesen kann, versteht der Computer nur Maschinencode. Das heißt, der Quellcode muss in Maschinencode übersetzt werden, damit das Programm vom Computer überhaupt ausgeführt werden kann.

Eine Übersetzung von Quellcode in Maschinencode findet in C++ in zwei Schritten statt: Zuerst wird der Quellcode durch den Compiler in Objektcode übersetzt. Dann wird der Objektcode durch den Linker in eine ausführbare Datei umgewandelt.

Im ersten Schritt übersetzt der Compiler den von Ihnen geschriebenen C++-Quellcode direkt in den äquivalenten Maschinencode. Der Compiler geht Schritt für Schritt durch den Quellcode und verwendet sozusagen ein Wörterbuch, um bestimmte Anweisungen in C++ durch fest definierten Maschinencode zu ersetzen. Die Datei, die vom Compiler nach getaner Arbeit erzeugt wird, heißt Objektdatei. Während C++-Quellcode normalerweise in Dateien mit der Endung cpp gespeichert wird, erhalten Objektdateien standardmäßig die Endung o oder obj.

Nun kann es sein – und das ist in der Praxis normalerweise immer der Fall – dass Sie in Ihrem Quellcode auf Hilfsmittel zugreifen, die Sie nicht selber programmiert haben, sondern wiederverwenden. Sie rufen beispielsweise eine Funktion auf, die von einem anderen Programmierer entwickelt wurde, und die Sie so nützlich finden, dass Sie sie in Ihrem Programm verwenden wollen. Dieser andere Programmierer muss Ihnen diese Funktion natürlich irgendwie zur Verfügung stellen. Dies geschieht normalerweise durch Bibliotheken. Eine Bibliothek ist nichts anderes als eine Datei, in der lauter Funktionen definiert sind. Eine Bibliothek muss hierbei nicht unbedingt als Quellcode vorliegen, sondern kann auch in Maschinencode zur Verfügung gestellt werden.

Wenn Sie also die Funktion des anderen Programmierers aufrufen, kann der Compiler nicht den dazugehörigen Quellcode übersetzen, weil Sie ja gar nicht diese Funktion programmiert haben. Der Linker merkt nun, dass zu der besagten Funktion der Maschinencode fehlt, und kopiert den entsprechenden Maschinencode aus der Bibliothek in die Objektdatei hinein. Hat der Linker den Maschinencode für alle Funktionen kopiert, die nicht von Ihnen programmiert wurden und in Bibliotheken liegen, erhalten Sie eine ausführbare Datei. Diese Datei ist Ihr fertiges Programm in Maschinencode. Im Betriebssystem Windows erkennen Sie derartige Dateien an der Endung exe, unter Unix und Linux ist das eXecute-Flag gesetzt. Der Computer kann nun Ihr C++-Programm ausführen.


1.4 Bekannte Compiler

Microsoft, Borland, GCC, etc.

Wie Sie bereits wissen benötigt man zum Erstellen eines C++-Programms immer Compiler und Linker. Im allgemeinen Sprachgebrauch wird normalerweise nur der Compiler erwähnt, weil jedem C++-Programmierer klar ist, dass es zu diesem Compiler auch einen Linker geben muss.

Unter den Windows-Betriebssystemen sind Microsoft Visual C++ und Borland C++Builder die am weitesten verbreiteten C++-Compiler. Genaugenommen handelt es sich hierbei nicht nur um Compiler, sondern um komplette Entwicklungsumgebungen. Eine Entwicklungsumgebung stellt eine Anwendung dar, die für eine unkomplizierte, einfache und möglichst schnelle Programmierung optimiert ist. Ein wichtiger Bestandteil von Entwicklungsumgebungen ist selbstverständlich der Compiler. Daneben stellen Entwicklungsumgebungen aber noch eine Reihe nützlicher Funktionen bereit, mit denen sich beispielsweise Quellcode visuell darstellen lässt, um in größeren Projekten leichter die Übersicht zu behalten. Eine professionelle Entwicklung von C++-Anwendungen ist ohne Entwicklungsumgebungen kaum möglich.

Der am weitesten verbreitete Compiler unter den Unix- und Linux-Betriebssystemen ist GCC. GCC ist eigentlich ein ganzes Paket an Compilern für verschiedene Programmiersprachen. Um C++-Programme zu übersetzen, bedient man sich des Compilers g++ von GCC. Im Gegensatz zu den Programmen von Microsoft und Borland handelt es sich bei GCC und g++ tatsächlich nur um Compiler und nicht um Entwicklungsumgebungen. Während also bei Microsoft und Borland beispielsweise Kompilieren und Linken komfortabel über Menüs ausgeführt werden kann, werden die Compiler aus GCC über Kommandozeilenbefehle gestartet. Um das ständige Wiederholen von Befehlen und vor allem langen Parameterketten zu vermeiden, stehen Make-Dateien zur Verfügung, mit denen Quellcode anhand bestimmer Regeln automatisch übersetzt werden kann. Da Make-Dateien auch wieder zusätzliche Einarbeitungszeit durch den Programmierer benötigen, sind Entwicklungsumgebungen vor allem für den Programmieranfänger sicherlich hilfreicher. Hier kann voll und ganz auf das Erlernen der Sprache konzentriert werden anstatt sich mit Kommandozeilenbefehlen, Parametern und Make-Dateien herumzuschlagen.

Neben oben vorgestellten C++-Compilern gibt es auch weniger bekannte wie beispielsweise Comeau C++. Unter Windows ist jedoch vor allem die Microsoft-Entwicklungsumgebung, unter Unix und Linux GCC marktbeherrschend.

GCC ist Open-Source-Software und steht seit eh und je kostenlos zur Verfügung. Sollten Sie mit Unix oder Linux arbeiten, empfiehlt sich die Verwendung von g++. Häufig wird GCC automatisch installiert und steht eventuell auf Ihrem System schon zur Verfügung. Mit dem Befehl g++ --version können Sie schnell überprüfen, ob g++ vorhanden ist und welche Version installiert ist. Wenn Sie mindestens die Version 4.0 installiert haben, sollten Sie sämtliche Beispiele aus diesem Buch kompilieren können.

Microsoft und Borland verkaufen ihre Entwicklungsumgebungen je nach Edition zu mehr oder weniger hohen Preisen. Beide bieten jedoch auch eine kostenlose Edition an, die geradezu ideal für C++-Einsteiger ist. Microsoft nennt seine kostenlose Entwicklungsumgebung Visual C++ Express, bei Borland heißt sie Turbo C++. Alle Beispiele in diesem Buch sind mit der Version 2008 von Visual C++ Express getestet worden. Wenn Sie sichergehen wollen, dass die Beispiele bei Ihnen ohne Probleme funktionieren, können Sie ebenfalls Visual C++ Express installieren. Turbo C++ sollte normalerweise die Beispiele ebenfalls problemlos kompilieren, nur wurde das wie gesagt nicht explizit getestet.


1.5 Mein erstes C++-Programm

Hallo, Welt!

Im Folgenden sehen Sie einen kurzen Quellcode - Ihr erstes C++-Programm!

#include <iostream> 

int main() 
{ 
  std::cout << "Hallo, Welt!" << std::endl; 
} 

Geben Sie den Quellcode entweder in Ihre Entwicklungsumgebung ein oder speichern Sie ihn in einer Datei ab. Verwenden Sie eine Entwicklungsumgebung, führen Sie das C++-Programm über den entsprechenden Menüeintrag aus. In Visual C++ Express wäre das im Menü Erstellen der Eintrag Ausführen. Arbeiten Sie hingegen ohne Entwicklungsumgebung und möchten Ihren Quellcode, den Sie beispielsweise in der Datei hallowelt.cpp gespeichert haben, mit Hilfe von GCC in Maschinencode übersetzen, geben Sie folgendes ein: g++ -o hallowelt hallowelt.cpp. Anschließend können Sie mit ./hallowelt das Programm ausführen.

Wenn Sie sich wundern, warum Sie weder mit Ihrer Entwicklungsumgebung noch mit GCC zwei Schritte - nämlich zum Kompilieren und Linken - ausführen müssen, dann liegt das daran, dass sowohl Ihre Entwicklungsumgebung als auch g++ beide Schritte automatisch direkt hintereinander ausführen.


1.6 Ein- und Ausgabe mit C++

Grundlegende Informationen zur Ein- und Ausgabe

Alle Beispielprogramme in diesem Buch geben Daten auf den Bildschirm aus und verlangen hin und wieder eine Eingabe des Anwenders. Die Ausgabe auf den Bildschirm ist notwendig, damit tatsächlich überprüft werden kann, ob die Programme wie gewünscht funktionieren. Ohne die Ausgabe auf den Bildschirm wäre eine Erfolgskontrolle nur schwer möglich.

Wenn Sie obiges Beispielprogramm ausgeführt haben, bekamen Sie die Meldung Hallo, Welt! auf den Bildschirm ausgegeben. Sie greifen innerhalb dieses kleinen Programms bereits auf ein Objekt aus der C++-Standardbibliothek zu, nämlich auf std::cout. Es handelt sich hierbei um die Standardausgabe, die normalerweise mit dem Monitor verbunden ist.

Die Standardausgabe ist ein Mechanismus, der von der C++-Standardbibliothek zur Verfügung gestellt wird, um Daten unkompliziert auf ein Ausgabemedium auszugeben. Die Standardausgabe std::cout ist für gewöhnlich mit dem Monitor verbunden. Beachten Sie die Formulierung: Die Standardausgabe std::cout ist nicht der Monitor, sondern mit dem Monitor verbunden. So ist es zum Beispiel möglich, die Standardausgabe mit einem anderen Ausgabegerät zu verbinden und umzuleiten.

Vielleicht ist Ihnen aufgefallen, dass an verschiedenen Stellen das Kürzel std:: auftaucht. Es handelt sich hierbei um die Abkürzung von Standard. std ist ein sogenannter Namensraum. Aufgrund der großen Verbreitung von C++ kann es sein, dass Programmierer beispielsweise gleichlautende Funktionen entwickeln. Um Überschneidungen zu vermeiden, wurden im offiziellen Standard Namensräume eingeführt: Jeder Entwickler sollte also in seinem Programm beispielsweise alle Funktionen einem Namensraum zuordnen. Beim Funktionsaufruf wird nun nicht mehr nur der Name der Funktion angegeben, sondern zusätzlich der Namensraum, in dem sich die Funktion befindet.

Dass es jetzt zu Überschneidungen kommt, ist zwar nicht ausgeschlossen, aber unwahrscheinlicher: Denn jetzt müssen nicht nur Funktionsnamen gleichlauten, sondern auch noch Namensräume. Die Funktionen, Klassen und Objekte, die im C++-Standard definiert sind, sind alle dem Namensraum std zugeordnet. Um also auf Funktionen, Klassen und Objekte im C++-Standard korrekt zuzugreifen, wird jeweils std getrennt durch den Zugriffsoperator :: vorangestellt.

Code-Zeilen, die mit einem # beginnen, sind sogenannte Präprozessor-Anweisungen. Sie werden in einem späteren Kapitel mehr über den Präprozessor erfahren. Da jedes Beispielprogramm in diesem Buch aber mindestens einen Präprozessor-Befehl #include enthält, soll dieser hier kurz vorgestellt werden.

Mit #include wird der Inhalt einer Datei an die Stelle eingefügt, an der das #include steht. Diese Präprozessor-Anweisung wird üblicherweise verwendet, um Header-Dateien einzubinden. Header-Dateien enthalten Definitionen für Funktionen und andere Hilfsmittel, die Sie in Ihrem Programm einsetzen wollen. Ohne eine vorherige Definition wäre ein Einsatz fremder Hilfsmittel nicht möglich, da der Compiler nicht erkennen könnte, was für Hilfsmittel Sie eigentlich versuchen einzusetzen. So müssen Sie zum Beispiel immer die Header-Datei iostream mit #include einbinden, wenn Sie auf std::cout zugreifen wollen. Da std::cout nicht zum Grundwortschatz der Programmiersprache C++ gehört, würde der Compiler ohne eine vorherige Definition nicht verstehen, was dieses std::cout eigentlich sein soll. Indem Sie mit #include die Datei iostream einbinden, sieht der C++-Compiler die in dieser Datei enthaltene Definition und erkennt, dass die Verwendung von std::cout in Ihrem Programm korrekt ist.

Im folgenden Programm sehen Sie nun zum ersten Mal eine Eingabe:

#include <iostream> 
#include <string> 

int main() 
{ 
  std::string vorname; 
  std::cin >> vorname; 
  std::cout << "Sie heissen " << vorname << std::endl; 
} 

Die Eingabe - also Ihr Vorname - kann beliebig lang sein, darf aber keine Leerzeichen enthalten. Sie wird, wenn Sie Enter drücken, in der Variablen vorname gespeichert. Diese Variable basiert auf dem Datentyp std::string, der - wie am Namensraum std erkannt werden kann - zum C++-Standard gehört. So wie für die Verwendung von std::cout die Header-Datei iostream eingebunden werden musste, müssen Sie für std::string mit #include auf die Header-Datei string verweisen - diese Header-Datei enthält die Definition von std::string. Wenn Sie die Bedeutung der Variablen vorname nicht verstehen und nicht wissen, was ein Datentyp ist, macht das nichts - Sie lernen Variablen und Datentypen im Kapitel 2, Variablen ausführlich kennen.

std::cin ist das Gegenstück zu std::cout und ist mit der Tastatur verbunden. Über std::cin wird der Vorname gelesen und in der Variablen vorname gespeichert. In der letzten Zeile wird dann der Vorname auf den Monitor ausgegeben.

Das obige Beispielprogramm wird nun um eine zweite Eingabe erweitert.

#include <iostream> 
#include <string> 

int main() 
{ 
  std::string vorname; 
  std::cin >> vorname; 
  std::string nachname; 
  std::cin >> nachname; 
  std::cout << "Sie heissen " << vorname << " " << nachname << std::endl; 
} 

Sie werden nun aufgefordert, nach dem Vornamen den Nachnamen einzugeben. So wie der Vorname wird auch der Nachname in einer Variablen vom Typ std::string gespeichert - was wiederum bedeutet, dass er beliebig lang sein kann, aber kein Leerzeichen enthalten darf. Nach den Eingaben werden dann sowohl der Vor- als auch der Nachname in einer Zeile ausgegeben.

In den Beispielprogrammen in den folgenden Kapiteln werden Sie viele Ein- und Ausgaben sehen. So können Sie die Programme mit unterschiedlichen Eingaben füttern und überprüfen, welche Ergebnisse sie ausgegeben. Das hilft Ihnen nicht nur, besser zu verstehen, wie die Beispielprogramme im Detail funktionieren und wie sie Daten verarbeiten. Es ermöglicht Ihnen auch, eigene Programme auf Fehler hin zu überprüfen, da eine einfache Kontrolle Ihres Codes möglich ist.


1.7 Bestandteile der Programmiersprache C++

Aufbau der Programmiersprache

C++ besteht wie auch andere Programmiersprachen aus folgenden Bestandteilen: Variablen, Operatoren, Kontrollstrukturen und Funktionen. Darüberhinaus bietet C++ wie auch die Programmiersprache C Strukturen und Enumerationen an. Während C nun das Hauptaugenmerk auf Zeiger legt, stellt C++ für bestimmte Situationen einfachere Hilfsmittel als Zeiger zur Verfügung. Ganz ohne Zeiger geht es in C++ aber auch nicht - deswegen wird in einem eigenen Kapitel auf Zeiger eingegangen.

Der Schwerpunkt von C++ liegt aber in der Objektorientierung – ohne ein Verständnis von objektorientierten Konzepten ist es zum Beispiel unmöglich, voll und ganz von der C++-Standardbibliothek zu profitieren. Als eine Programmiersprache, die das Programmierparadigma der Objektorientierung unterstützt, bietet C++ daher das Arbeiten mit Klassen und Objekten an. Die objektorientierten Konzepte von C++ sind Thema des Buchs Programmieren in C++: Aufbau.

Bis zu Objekten und Klassen ist es noch ein weiter Weg. Voraussetzung für das Verständnis dieser Konzepte ist ein sicherer Umgang mit dem Grundwortschatz von C++ wie eben Kontrollstrukturen und Funktionen. Da Computerprogramme Daten verarbeiten, müssen Sie aber erst lernen, wie Daten in C++-Programmen überhaupt gespeichert werden. Dazu schauen wir uns im folgenden Kapitel Variablen an und steigen mit ihnen in die Programmiersprache C++ ein.