Возвращаемые значения
Функция printArea, которую вы писали раньше в этом уроке, выводит площадь, и на этом всё. Но что, если мы хотим продолжить вычисления с результатом, например сложить площади всех комнат в квартире? Выведенное значение появляется только в выводе, и программа не может с ним дальше работать.
Поэтому функции могут возвращать значение. Инструкция return отправляет значение обратно в то место, откуда вызвали функцию. Вместо void перед именем функции пишут тип данных возвращаемого значения:
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(2, 3);
std::cout << result << std::endl;
}Эта программа выводит:
5Вызов add(2, 3) выполняет функцию, и функция возвращает 5. Можно представить, что вызов заменяется значением, которое вернула функция, так что int result = add(2, 3); превращается в int result = 5;. Значение, которое функция отдаёт обратно, называется её возвращаемым значением, а его тип, здесь int, — типом возвращаемого значения. Функция может возвращать значение любого типа, например double, bool или std::string.
Вызов функции можно использовать везде, где можно написать значение: сразу вывести его, вычислять с ним или поставить в условие:
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
std::cout << add(2, 3) << std::endl;
int total = add(2, 3) * 2;
std::cout << total << std::endl;
if (add(2, 3) > 4) {
std::cout << "Больше 4" << std::endl;
}
}Эта программа выводит:
5
10
Больше 4В std::cout << add(2, 3) программа сначала вызывает add(2, 3), а затем выводит число 5, которое вернула функция. В add(2, 3) * 2 вызов превращается в 5, а 5 * 2 — это 10.
Теперь вы знаете, что означает int перед main: main тоже возвращает целое число. Она возвращает его тому, кто запустил программу, и 0 означает, что программа завершилась нормально. Поэтому return 0; пишут в конце main. Если его опустить, main вернёт 0 сама, но это работает только для main, а не для других функций. Отныне мы будем писать return 0;.
Частая ошибка — забыть return в функции, которая не main. Функция пообещала вернуть int, но не возвращает никакого значения:
#include <iostream>
int add(int a, int b) {
int sum = a + b;
}
int main() {
std::cout << add(2, 3) << std::endl;
return 0;
}Программа компилируется, но когда вызывает функцию, останавливается с ошибкой, например RuntimeError: unreachable. Под ней вы видите предупреждение компилятора, которое объясняет причину:
RuntimeError: unreachable
main.cpp:5:1: warning: non-void function does not return a value [-Wreturn-type]
5 | }
| ^
1 warning generated.Предупреждение говорит, что функция, не являющаяся void, не возвращает значение. Если добавить в конец функции return sum;, всё заработает.
Задание
- 1
Программа не компилируется: ошибка
use of undeclared identifier 'rectangleArea'говорит, что функцииrectangleAreaещё нет. Напишите её на месте комментария: у неё два параметра типаint,widthиheight, а возвращает онаwidth * height. Тогда программа выведетКухня: 12иСпальня: 20. - 2
В квартире есть ещё гостиная размером 6 × 5 м. В конце
main, передreturn 0;, создайте переменнуюlivingRoomс её площадью, вычисленной функциейrectangleArea. Затем выведите площадь всей квартиры,kitchen + bedroom + livingRoom, с подписью:Площадь квартиры: 62.