Příkaz return ukončí funkci
return dělá dvě věci najednou: vrátí hodnotu a hned ukončí funkci. Zbytek funkce se už neprovede:
#include <iostream>
int secti(int a, int b) {
return a + b;
std::cout << "Tento řádek se nikdy neprovede." << std::endl;
}
int main() {
std::cout << secti(2, 3) << std::endl;
return 0;
}Tento program vypíše:
5Řádek za return se nikdy neprovede, protože funkce skončila už o řádek dřív.
To se hodí hlavně v kombinaci s podmínkami. Následující funkce popíše počasí podle teploty:
#include <iostream>
#include <string>
std::string popisPocasi(int stupne) {
if (stupne < 0) {
return "mrzne";
}
if (stupne < 20) {
return "chladno";
}
return "teplo";
}
int main() {
std::cout << popisPocasi(-5) << std::endl;
std::cout << popisPocasi(12) << std::endl;
std::cout << popisPocasi(25) << std::endl;
return 0;
}Tento program vypíše:
mrzne
chladno
teploProjděme si všechna tři volání:
popisPocasi(-5):-5 < 0platí, a tak funkce vrátí"mrzne"a skončí. Druhá podmínka se vůbec nekontroluje.popisPocasi(12): první podmínka neplatí a druhá ano, a tak funkce vrátí"chladno".popisPocasi(25): neplatí ani jedna podmínka, a tak se funkce dostane až na poslední řádek a vrátí"teplo".
Nepotřebovali jsme žádné else: jakmile se provede return, zbytek funkce se stejně přeskočí. (S else if a else by funkce fungovala stejně.) Záleží ale na pořadí podmínek, protože vyhraje první return, který se provede. Kdyby funkce nejdřív kontrolovala stupne < 20, vrátila by pro -5 hodnotu "chladno", protože i -5 je menší než 20.
Pozor na poslední return. Když ho vynecháte, funkce pro 25 nemá co vrátit: neplatí žádná podmínka a funkce dojde na konec bez return. Program pak vypíše mrzne a chladno a skončí chybou, pod kterou uvidíte varování warning: non-void function does not return a value in all control paths (funkce, která není void, nevrací hodnotu ve všech případech). Funkce, která není void, musí vrátit hodnotu vždycky, ať podmínky dopadnou jakkoli.
Ve funkci typu void můžete napsat return; bez hodnoty. Funkce pak jen skončí:
#include <iostream>
void vypisPodil(int a, int b) {
if (b == 0) {
std::cout << "Nulou dělit nejde." << std::endl;
return;
}
std::cout << a / b << std::endl;
}
int main() {
vypisPodil(10, 2);
vypisPodil(10, 0);
return 0;
}Tento program vypíše:
5
Nulou dělit nejde.Jak psát:
Pokyny
Funkce cenaVstupenky vrací cenu vstupenky do zoo pro návštěvníka daného věku. Zatím vrací všem 200. Nad řádek return 200; přidejte podmínky: děti mladší 6 let mají vstup zdarma (0) a návštěvníci mladší 18 let platí 100. Program pak vypíše 0, 100 a 200.
Senioři od 65 let platí také 100. Přidejte pro ně do funkce podmínku a na konci main, před return 0;, vypište cenaVstupenky(70). Program vypíše ještě jednu 100.
Začněte programovat zdarma
7/10