Найти в Дзене

Основы С++: Возвращаемые значения функций, тип void и обзор оператора return

Оглавление

В статье "Как компьютер понимает программиста или краткий обзор стандартной структуры программы на C++?" я уже упоминал о том, что функции возвращают значение после того, как завершили свою работу. Тогда речь шла о главной функции main:

Когда программа завершается, ей нужно сообщить системе: успешно она завершена или нет. Для этого и существует оператор возврата. Он возвращает целое число. Сигналом успешного завершения служит число 0.

Но на самом деле, все пользовательские функции, после того, как они завершат инструкции внутри них, могут возвращать (а могут и не возвращать) значение туда, откуда они были вызваны.

Например, функция main, по завершению своей работы, всегда возвращает значение в операционную систему. Потому что именно операционная система ее вызвала. Она сигнализирует системе, что программа завершилась правильно числовым значением: 0. Именно поэтому в конце каждой программы мы пишем инструкцию: return 0;

Функции возвращают значение туда, откуда их вызвали.

Какие значения может возвращать оператор return?

Тип возвращаемого значения зависит от типа функции. Функция main всегда типа Int и возвращает в операционную систему она целое число 0. Но, как мы можем пользоваться этой информацией в собственных целях?

Мы можем возвращать значения из собственных функций и использовать их в своих программах. Давайте попробуем?

Напишем программу, которая будет запрашивать у пользователя число, а потом выводить его квадрат, используя для запроса числа у пользователя отдельную функцию, которую мы создадим.

Шаг 1. Создаем функцию, которая будет запрашивать число на ввод с консоли.

Строка 2 создает функцию c названием EnterNumber, типа int.

Строки 3-6 описывают инструкции, которые будут выполняться, когда мы вызовем эту функцию. Сначала пользователю на экране предложат ввести целое число. Потом программа создаст переменную для целого числа. После чего получит из консоли значение от пользователя.

Хорошо, а теперь давайте рассуждать. Итак, допустим мы вызвали эту функцию из главной функции main.

-2

Функция выполнила все, что мы в ней описали. А как нам получить из нее значение?

Выше мы говорили: Функция возвращает значение туда, откуда она была вызвана. Мы вызвали нашу функцию, которая просит и получает число, из главной функции main. Давайте напишем в нашей функции, что она по завершению работы вернет в main число, которое она получила от пользователя.

-3

Итак, на строке 7 мы указали, что как только функция завершит работу, она вернет вызывающей ее функции main значение, которое получила, то есть переменную input. Выглядит эта инструкция так: return input;

Хорошо. Теперь мы можем получить значение от пользователя из нашей специальной функции. Окей, а как это значение принять?

Вспомните, мы в нескольких статьях разбирали универсальный инструмент, который может принимать различные значения и хранить их — переменные.

Воспользуемся переменной для принятия возвращающегося из функции значения. Как? Мы инициализируем нашу новую переменную функцией EnterNumber()

-4

Мы сделали это на строке 11. Итак, разберемся, что будет делать компилятор, когда прочитает инструкцию int num {EnterNumber()};

Эта инструкция означает: зарезервируй место в памяти для переменной c именем num типа int и инициализируй ее значением, возвращенным из функции EnterNumber, предварительно запустив выполнение инструкций из этой функции (вызвав ее).

Итак, мы успешно воспользовались оператором return, вернули нужное нам значение из функции и поместили его в переменную. Теперь пора завершить нашу программу, выводя на экран квадрат числа, которое мы получили из функции EnterNumber() через std::cout

-5

Вот и готова наша программа. Перепишите строчки 11-12 в свой код, скомпилируйте, запустите и протестируйте ее.

Если вы нигде не ошиблись, результат будет таким.

-6

Итак, мы разобрались как работает оператор return и что значит "вернуть значение". Остается вопрос: А может ли функция не возвращать никаких значений? Да может!

Тип void

Тип функции void (ничто, пустота) покажет компилятору, что эта функция не возвращает никаких значений. Если в конце такой функции вы установите оператор return, ваша программа просто не будет компилироваться. Такую функцию можно вызывать так же, как и функции возвращающие значения. Однако она просто будет выполнять все инструкции внутри нее и после этого завершаться.

Вот простой пример:

-7

Эта программа печатает две строки текста, которые хранятся в двух функциях типа void. Как можно увидеть, обе функции не возвращают ничего. Они просто выполняют инструкции внутри, после того, как функция main вызывает их.

Резюме:

Практическое использование возврата значения из функции позволит вам минимизировать повторения в вашем коде. То есть для выполнения рутинных операций вы сможете создавать несколько функций, которые будете вызывать по мере необходимости. Это убережет вас от ненужных повторений и сделает ваш код легко читаемым.
Помните о том, что функции можно вызывать столько раз, сколько вам нужно.

На этом сегодня мы закончим. Спасибо, что читаете мой канал. Каждый ваш просмотр и лайк добавляет популярности моим статьям. Мне это важно.

Если вы все еще не подписаны, обязательно сделай это, чтобы не пропустить выход новых статей.