return завершает функцию
return делает сразу два дела: возвращает значение и тут же завершает функцию. Остальная часть функции не выполняется:
#include <iostream>
int add(int a, int b) {
return a + b;
std::cout << "Эта строка никогда не выполняется." << std::endl;
}
int main() {
std::cout << add(2, 3) << std::endl;
return 0;
}Эта программа выводит:
5Строка после return никогда не выполняется, потому что функция уже закончилась строкой выше.
Особенно удобно это вместе с условиями. Следующая функция описывает погоду по температуре:
#include <iostream>
#include <string>
std::string describeWeather(int degrees) {
if (degrees < 0) {
return "мороз";
}
if (degrees < 20) {
return "холодно";
}
return "тепло";
}
int main() {
std::cout << describeWeather(-5) << std::endl;
std::cout << describeWeather(12) << std::endl;
std::cout << describeWeather(25) << std::endl;
return 0;
}Эта программа выводит:
мороз
холодно
теплоРазберём все три вызова:
describeWeather(-5):-5 < 0истинно, поэтому функция возвращает"мороз"и завершается. Второе условие даже не проверяется.describeWeather(12): первое условие ложно, а второе истинно, поэтому функция возвращает"холодно".describeWeather(25): ни одно условие не истинно, поэтому функция доходит до последней строки и возвращает"тепло".
Нам не понадобился ни один else: как только выполняется return, остальная часть функции всё равно пропускается. (С else if и else функция работала бы так же.) Но порядок условий важен, потому что побеждает первый return, который выполнится. Если бы функция сначала проверяла degrees < 20, для -5 она вернула бы "холодно", ведь -5 тоже меньше 20.
Остерегайтесь последнего return. Если его пропустить, для 25 функции нечего возвращать: ни одно условие не истинно, и функция доходит до конца без return. Тогда программа выведет мороз и холодно и остановится с ошибкой, под которой вы увидите предупреждение warning: non-void function does not return a value in all control paths. Функция, не являющаяся void, всегда должна возвращать значение, как бы ни сложились условия.
В void-функции можно написать return; без значения. Тогда функция просто завершается:
#include <iostream>
void printDivision(int a, int b) {
if (b == 0) {
std::cout << "На ноль делить нельзя." << std::endl;
return;
}
std::cout << a / b << std::endl;
}
int main() {
printDivision(10, 2);
printDivision(10, 0);
return 0;
}Эта программа выводит:
5
На ноль делить нельзя.Задание
- 1
Функция
ticketPriceвозвращает цену билета в зоопарк для посетителя заданного возраста. Пока что для всех она возвращает200. Над строкойreturn 200;добавьте условия: дети младше 6 лет проходят бесплатно (0), а посетители младше 18 лет платят100. Тогда программа выведет0,100и200. - 2
Пенсионеры в возрасте 65 лет и старше тоже платят
100. Добавьте в функцию условие для них, а в концеmain, передreturn 0;, выведитеticketPrice(70). Программа выведет ещё одно100.