return beendet die Funktion
return tut zwei Dinge auf einmal: Es gibt einen Wert zurück und beendet die Funktion sofort. Der Rest der Funktion wird nicht ausgeführt:
#include <iostream>
int addiere(int a, int b) {
return a + b;
std::cout << "Diese Zeile läuft nie." << std::endl;
}
int main() {
std::cout << addiere(2, 3) << std::endl;
return 0;
}Dieses Programm gibt aus:
5Die Zeile nach return läuft nie, weil die Funktion schon eine Zeile früher beendet wurde.
Besonders praktisch ist das zusammen mit Bedingungen. Die folgende Funktion beschreibt das Wetter anhand der Temperatur:
#include <iostream>
#include <string>
std::string beschreibeWetter(int grad) {
if (grad < 0) {
return "frostig";
}
if (grad < 20) {
return "kalt";
}
return "warm";
}
int main() {
std::cout << beschreibeWetter(-5) << std::endl;
std::cout << beschreibeWetter(12) << std::endl;
std::cout << beschreibeWetter(25) << std::endl;
return 0;
}Dieses Programm gibt aus:
frostig
kalt
warmGehen wir alle drei Aufrufe durch:
beschreibeWetter(-5):-5 < 0ist wahr, also gibt die Funktion"frostig"zurück und endet. Die zweite Bedingung wird gar nicht geprüft.beschreibeWetter(12): Die erste Bedingung ist falsch und die zweite wahr, also gibt die Funktion"kalt"zurück.beschreibeWetter(25): Keine der Bedingungen ist wahr, also kommt die Funktion bis zur letzten Zeile und gibt"warm"zurück.
Wir brauchten kein else: Sobald ein return ausgeführt wird, wird der Rest der Funktion ohnehin übersprungen. (Mit else if und else würde die Funktion genauso funktionieren.) Aber die Reihenfolge der Bedingungen ist wichtig, denn das erste return, das ausgeführt wird, gewinnt. Würde die Funktion zuerst grad < 20 prüfen, gäbe sie für -5 "kalt" zurück, denn -5 ist auch kleiner als 20.
Achte auf das letzte return. Lässt du es weg, hat die Funktion für 25 nichts zurückzugeben: Keine Bedingung ist wahr, und die Funktion erreicht ihr Ende ohne return. Das Programm gibt dann frostig und kalt aus und bricht mit einem Fehler ab, unter dem du die Warnung warning: non-void function does not return a value in all control paths siehst. Eine Funktion, die nicht void ist, muss immer einen Wert zurückgeben, wie auch immer die Bedingungen ausfallen.
In einer void-Funktion kannst du return; ohne Wert schreiben. Die Funktion endet dann einfach:
#include <iostream>
void gibDivisionAus(int a, int b) {
if (b == 0) {
std::cout << "Durch null kann man nicht teilen." << std::endl;
return;
}
std::cout << a / b << std::endl;
}
int main() {
gibDivisionAus(10, 2);
gibDivisionAus(10, 0);
return 0;
}Dieses Programm gibt aus:
5
Durch null kann man nicht teilen.So schreibst du es:
Anweisungen
- 1
Die Funktion
ticketPreisgibt den Preis einer Zooeintrittskarte für einen Besucher des angegebenen Alters zurück. Bisher gibt sie für alle20zurück. Füge über der Zeilereturn 20;Bedingungen hinzu: Kinder unter 6 kommen kostenlos hinein (0), und Besucher unter 18 zahlen10. Das Programm gibt dann0,10und20aus. - 2
Senioren ab 65 Jahren zahlen auch
10. Füge der Funktion eine Bedingung für sie hinzu und gib am Ende vonmain, vorreturn 0;,ticketPreis(70)aus. Das Programm gibt eine weitere10aus.