Werte zurückgeben
Die Funktion gibFlaecheAus, die du früher in dieser Lektion geschrieben hast, gibt die Fläche aus, und das war es. Aber was, wenn wir mit dem Ergebnis weiterrechnen wollen, zum Beispiel um die Flächen aller Zimmer einer Wohnung zu addieren? Ein ausgegebener Wert erscheint nur in der Ausgabe, und das Programm kann nicht weiter mit ihm arbeiten.
Deshalb können Funktionen einen Wert zurückgeben. Die Anweisung return schickt einen Wert an die Stelle zurück, an der die Funktion aufgerufen wurde. Statt void schreibst du dann vor den Namen den Datentyp des Werts, den die Funktion zurückgibt:
#include <iostream>
int addiere(int a, int b) {
return a + b;
}
int main() {
int ergebnis = addiere(2, 3);
std::cout << ergebnis << std::endl;
}Dieses Programm gibt aus:
5Der Aufruf addiere(2, 3) führt die Funktion aus, und die Funktion gibt 5 zurück. Du kannst dir vorstellen, dass der Aufruf durch den Wert ersetzt wird, den die Funktion zurückgegeben hat, aus int ergebnis = addiere(2, 3); wird also int ergebnis = 5;. Der Wert, den eine Funktion zurückgibt, heißt Rückgabewert, und sein Typ, hier int, ist der Rückgabetyp. Eine Funktion kann einen Wert beliebigen Typs zurückgeben, zum Beispiel double, bool oder std::string.
Einen Funktionsaufruf kannst du überall verwenden, wo du einen Wert schreiben könntest: ihn gleich ausgeben, mit ihm rechnen oder ihn in eine Bedingung setzen:
#include <iostream>
int addiere(int a, int b) {
return a + b;
}
int main() {
std::cout << addiere(2, 3) << std::endl;
int gesamt = addiere(2, 3) * 2;
std::cout << gesamt << std::endl;
if (addiere(2, 3) > 4) {
std::cout << "Mehr als 4" << std::endl;
}
}Dieses Programm gibt aus:
5
10
Mehr als 4Bei std::cout << addiere(2, 3) ruft das Programm zuerst addiere(2, 3) auf und gibt dann die Zahl 5 aus, die die Funktion zurückgegeben hat. Bei addiere(2, 3) * 2 wird der Aufruf zu 5, und 5 * 2 ist 10.
Jetzt weißt du, was das int vor main bedeutet: Auch main gibt eine ganze Zahl zurück. Sie geht an den, der das Programm gestartet hat, und 0 bedeutet, dass das Programm ohne Fehler beendet wurde. Deshalb steht return 0; am Ende von main. Lässt du es weg, gibt main von selbst 0 zurück, aber das gilt nur für main, nicht für andere Funktionen. Ab jetzt schreiben wir return 0;.
Ein häufiger Fehler ist, return in einer anderen Funktion als main zu vergessen. Die Funktion hat versprochen, einen int zurückzugeben, gibt aber keinen Wert zurück:
#include <iostream>
int addiere(int a, int b) {
int summe = a + b;
}
int main() {
std::cout << addiere(2, 3) << std::endl;
return 0;
}Das Programm lässt sich kompilieren, aber wenn es die Funktion aufruft, bricht es mit einem Fehler ab, zum Beispiel RuntimeError: unreachable. Darunter siehst du die Warnung des Compilers, die sagt, warum:
RuntimeError: unreachable
main.cpp:5:1: warning: non-void function does not return a value [-Wreturn-type]
5 | }
| ^
1 warning generated.Die Warnung sagt, dass eine Funktion, die nicht void ist, keinen Wert zurückgibt. Mit return summe; am Ende der Funktion ist das behoben.
So schreibst du es:
Anweisungen
- 1
Das Programm lässt sich nicht kompilieren: Der Fehler
use of undeclared identifier 'rechteckFlaeche'sagt, dass es die FunktionrechteckFlaechenoch nicht gibt. Schreibe sie anstelle des Kommentars: Sie hat zwei Parameter vom Typint,breiteundhoehe, und gibtbreite * hoehezurück. Das Programm gibt dannKüche: 12undSchlafzimmer: 20aus. - 2
Die Wohnung hat auch ein Wohnzimmer, das 6 × 5 Meter groß ist. Erstelle am Ende von
main, vorreturn 0;, eine Variablewohnzimmermit seiner Fläche, berechnet mit der FunktionrechteckFlaeche. Gib dann die Fläche der ganzen Wohnung,kueche + schlafzimmer + wohnzimmer, mit einer Beschriftung aus:Ganze Wohnung: 62.