C++ Kernelemente: Variablen, Ausdrücke und Ablaufsteuerung
Zu Teil 1: Grundlagen von C++ und Compiler
Zu Teil 2: Das erste C++-Programm
Teil 3: Variablen, Ausdrücke und Ablaufsteuerung in C++
Zu Teil 4: Funktionen in C++
Kernelemente von C++: Variablen und Ausdrücke
Ein Programm in C++ ist also zunächst mal eine Reihe von Anweisungen, die dem Computer vorgeben, was zu tun ist. Dabei beginnt die Abarbeitung wie zuvor gesagt in der Hauptfunktion des Programmes. Der Prozessor arbeitet bei der Ausführung des Programmes die Anweisungen der Hauptfunktion nacheinander ab, bis er ans Ende der Hauptfunktion gelangt und das Programm damit terminiert.
Doch was sind eigentlich Anweisungen? Zwei Beispiele haben wir ja bereits gesehen, einmal eine Anweisung die eine Ausgabe auf dem Bildschirm bewirkt und eine return-Anweisung, die einen Wert an die aufrufende Stelle einer Funktion zurück gibt. Doch viele Anweisungen zielen darauf ab, Variablen zu verändern. Und das schauen wir uns jetzt mal genauer an. Eine Variable ist einfach eine Speichereinheit, die irgend einen Wert enthalten kann, z.B. eine Zahl oder eine Zeichenkette (also ein Wort oder einen Satz). Eine Veränderung an einer Variablen könnte z.B. bedeuten, dass man zu einer Zahl eine andere hinzu addiert oder an eine Zeichenkette eine andere Zeichenkette anhängt.
Wir sehen uns das mal an einem ganz einfachen Beispiel an:
int summand1 = 10; int summand2 = 20; int summe = summand1 + summand2; cout << summe;
Den Zweck dieses Programmes können Sie vielleicht auch ohne Programmierkenntnisse schon erkennen: es sollen zwei Zahlen addiert werden und die Summe über die Kommandozeile an den Programmbenutzer ausgegeben werden. Das Programm besteht aus 4 Anweisungen, pro Zeile schreibt man in der Regel eine Anweisung und schließt diese mit Semikolon (;) ab. Das ist übrigens in vielen Programmiersprachen so.
Was wir hier sehen, ist zunächst mal eine Variablendeklaration. Die Deklaration einer Variable geschieht nach folgendem Muster:
TYP NAME;
Es wird also in dem Beispiel eine Variable mit dem Namen summand1 vom Typ int (was wie wir zuvor schon gelernt haben für Integer steht und Ganzzahl bedeutet) angelegt. Doch in dem Beispiel geht die Zeile noch weiter, es geschieht mehr als das bloße Anlegen einer Variable. In der Tat handelt es sich hier um eine Kombination aus Deklaration und Zuweisung. Zuweisung bedeutet, dass einer Variable ein bestimmter Wert zu gewiesen wird. Zuweisungen geschehen in C++ nach folgendem Muster:
NAME = WERT;
Wie Sie sehen, wurden diese beiden Anweisungen nun einfach zu einer einzigen Anweisung im Stil
TYP NAME = WERT;
kombiniert. D.h. es wird eine neue Variable angelegt und dieser direkt ein Wert zugewiesen.
Programmieren mit C++ - Einige unserer Empfehlungen
In unserem Beispiel haben wir gleich zwei Variablen angelegt, denen direkt Werte zugewiesen wurden, nämlich summand1 und summand2. Doch es geht weiter, es wird nun eine dritte Variable angelegt. Hierbei wird der Variable aber nicht einfach ein Wert zugewiesen, sondern wir finden dort, wo bei den anderen Zuweisungen ein Wert war, einen sogenannten Ausdruck. Wertzuweisungen können nämlich auch über folgende Syntax geschehen:
NAME = AUSDRUCK;
wobei AUSDRUCK dann irgend eine Formel ist, die zuerst ausgewertet wird. In diesem Fall haben wir also die Formel summand1 + summand2. Es werden also die Werte der beiden zuvor angelegten Variablen addiert. Erst wenn so die Summe (30) berechnet wurde, wird dieser Wert dann der Variable summe zugewiesen.
Die letzte Anweisung sollte Ihnen nun wieder vertraut vorkommen, es wird über das Ausgabeobjekt cout das Ergebnis der Summation auf der Kommandozeile ausgegeben.
Bedingungen und Schleifen: Weitere Grundelemente von C++
Nun schauen wir uns noch einige unerzichtbare Bestandteile der Programmiersprache C++ an. Bisher haben wir gesehen, dass man eine Reihe von Anweisungen einfach nacheinander ausführen kann. Hierbei brauchen wir aber noch ein bisschen mehr Kontrolle. Zum Beispiel wollen wir bewirken können, dass manche Anweisungen nicht bei jedem Programmlauf durchgeführt werden, sondern nur manchmal. Das erreicht man mit einer sogenannten if-Anweisung:
if (<BEDINGUNG_ERFÜLLT>) { Anweisung 1; Anweisung 2; ... } else { Anweisung 3; Anweisung 4; ... }
Die if-Anweisung dient also zur bedingten Ausführung: wenn eine bestimmte Bedingung erfüllt ist (wie eine Bedingung konkret aussehen kann, werden wir gleich sehen), werden die Anweisungen im darauf folgenden Codeblock ausgeführt. Ansonsten, also wenn die Bedingung nicht erfüllt ist, werden die Anweisungen ausgeführt, die hinter der else-Klausel gruppiert sind. Man kann den else-Teil übrigens auch komplett weglassen, in diesem Fall wird der komplette if-Block einfach nur übersprungen, wenn die Bedingung nicht erfüllt ist.
Um uns die if-Anweisung mal an einem realoen Beispiel anzusehen, erweitern wir unsere vorheriges Summen-Beispiel:
int summand1 = 10; int summand2 = 20; int summe = summand1 + summand2; cout << summe << endl; if (summe > 25) { cout << "Die Summe ist größer als 25"; }
Zwei Änderungen wurden gemacht: Zum ersten wurde die erste cout-Anweisung, die das Ergebnis der Summation ausgeben soll, um den Ausdruck „<< endl“ erweitert. Was das bedeutet? Nun, endl ist auch ein Objekt, das in iostream definiert ist. Wenn dieses Objekt mit dem <<-Operator an das Ausgabeobjekt "gesendet" wird, bewirkt es einen Zeilenumbruch auf der Kommandozeile (endl steht für "end line"). Wir sehen hier also, dass wir in einer einzelnen Anweisung mehrere Zeichenketten oder Objekte an das Ausgabeobjekt mittels << senden können:
cout << "String 1" << "String 2" << "String 3" << endl; cout << "String 4 neue Zeile";
Besonders von Interesse für uns ist aber die if-Anweisung, die wir ans Ende eingefügt haben. Wir wird nämlich überprüft, ob in der Variable summe ein Wert gespeichert ist, der größer als 25 ist. Wenn das der Fall ist, dann wird einfach eine zusätzliche Meldung auf der Kommandozeile ausgegeben.
An diesem Beispiel haben Sie auch gesehen, wie eine Bedingung formuliert werden kann. Oft werden dabei Ausdrücke verwendet, die einen Vergleichsoperator verwenden. Die Vergleichsoperatoren sind <, <=, ==, !=, >= und > (kleiner, kleiner gleich, gleich, ungleich, größer gleich, größer). Eine Bedingung kann auch ein komplexerer Ausdruck sein als in dem Beispiel, z.B.
summand1 * 5 >= summand2 / 3
was bedeutet, dass die Bedingung erfüllt ist, wenn das Produkt aus summand1 und 5 größer oder gleich als summand2 geteilt durch 3 ist.
Bedingungen werden auch bei dem nächsten Konzept, das wir kennen lernen werden, eine wichtige Rolle spielen. Was ist zum Beispiel, wenn Sie eine bestimmte Anweisung oder gar eine Reihe von Anweisungen mehrfach ausführen wollen? Mit dem bisher vermittelten Wissen müssten Sie die Anweisungen ebenso oft aufschreiben, wie Sie sie ausführen wollen. Das ist natürlich unnötig umständlich und daher gibt es in Programmiersprachen dafür das Konzept der Schleifen. Es gibt verschiedene Arten von Schleifen, wir werden hier nur die for-Schleifen betrachten.
Die for-Schleife verwendet man meistens, wenn man einen bestimmten Anweisungsblock für eine zuvor festgelegte Anzahl an Durchläufen ausführen will. Die Syntax der for-Schleife ist die folgende:
for (<INITIALISIERUNG>; <BEDINGUNG>; <INKREMENT>) { Anweisung 1; Anweisung 2; ... }
Das wirkt vielleicht auf den ersten Blick etwas eigenartig, ist aber relativ einfach. Initialisierung bedeutet, dass man hier Code angeben kann, der einmalig vor Beginn der Ausführung der Schleife durchgeführt wird. Normalerweise nutzt man das, um eine Zählervariable anzulegen (also eine Variable, mit der gezählt wird, wie oft eine Schleife schon durchlaufen wurde). Die Bedingung wird vor jedem Schleifendurchlauf geprüft, ob sie erfüllt ist. Das ist eine Bedingung wie bei einer if-Anweisung. Nur wenn die Bedingung erfüllt ist, wird die Schleife ein weiteres Mal durchlaufen, ansonsten terminiert die Schleife. Inkrement bedeutet, dass man hier Code einfügen kann, der NACH jedem Schleifendurchlauf ausgeführt wird. In der Regel benutzt man das, um die bei Initialisierung angelegte Schleifenvariable um 1 zu vergrößern (das nennt man „inkrementieren“).
Programmieren mit C++ - Einige unserer Empfehlungen
Konkret könnte eine for-Schleife also folgendermaßen aussehen:
int sum = 0; for (unsigned int i = 1; i <= 10; ++i) { sum = sum + i; }
Bei Initialisierung wird also eine Zählvariable i vom Typ unsigned int (das ist eine nicht negative Ganzzahl) angelegt und dieser Variable direkt der Wert 1 zugewiesen. Es wird nun bei jedem Schleifendurchlauf geprüft, ob i kleiner oder gleich 10 ist, so lange wird die Schleife ausgeführt. Als Inkrement-Teil der Schleife haben wir
++i
angegeben. Doch was bedeutet das? Nun, das ist einfach eine Abkürzung, es ist die Kurzform von
i = i+1;
++i bedeutet also, dass einfach die Zählervariable um 1 hochgesetzt wird. Im eigentlichen Schleifenrumpf wird nun jeweils unsere Zählvariable i aufsummiert, sodass wir als Ergebnis am Ende in der Variable sum die Summe der Zahlen von 1 bis 10 erhalten (sum(1,10) = 55).
Zur Verdeutlichung wollen wir die ersten Durchläufe der Schleife einmal konkret durchgehen. Zunächst hat die Variable sum den Wert 0. Nun startet unsere Schleife: es wird eine Variable i angelegt und dieser der Wert 1 zugewiesen. Nun wird zum ersten Mal die Bedingung geprüft: i ist kleiner oder gleich 10, also wird der Schleifenrumpf ausgeführt: i wird zu sum addiert, also hat sum nun den Wert 1. Der Schleifenrumpf besteht nur aus einer Anweisung, also ist der erste Durchlauf bereits komplett. Deshalb wird jetzt der Inkrement-Teil ausgeführt: die Variable i wird um 1 vergrößert, ihr Wert ist nun also 2. Es wird wieder die Bedingung geprüft, 2 ist immer noch kleiner oder gleich 10, also wird der Rumpf ein weiteres Mal ausgeführt. Nun werden wiederum die Variablen sum (1) und i (2) addiert, sodass sum danach den Wert 3 hat. Danach ist auch dieser Schleifendurchlauf beendet und es wird wieder inkrementiert. Das geht so lange weiter, bis i den Wert 10 hat. Dann wird der Schleifenrumpf ein letztes Mal ausgeführt. Danach wird dann i auf 11 inkrementiert und die nachfolgende Prüfung der Bedingung i <= 10 schlägt fehl. Damit wird die Schleife dann beendet.
Weiter geht es in Teil 4 des Tutorials mit C++-Funktionen.
Zu Teil 1: Grundlagen von C++ und Compiler
Zu Teil 2: Das erste C++-Programm
Teil 3: Variablen, Ausdrücke und Ablaufsteuerung in C++
Zu Teil 4: Funktionen in C++
Eine ausführliche Liste unserer Buchempfehlungen für C++ finden Sie hier.
Unsere Buchempfehlungen
Oder sehen Sie sich die vollständige Liste der Empfehlungen für C++ an.Wir haben auch eine Empfehlung für einen C++-Fernkurs parat.