Урок 12. Функции и return

   ⁄ 

 Обновлено 27 Июл 2017

  ⁄   

⁄  2

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

Часто, ваши программы должны будут прерывать то, что они делают, чтобы выполнить что-то другое. Вы делаете это в реальной жизни всё время. Например, вы читаете книгу и вспомнили, что нужно сделать телефонный звонок. Вы оставляете закладку в своей книге, звоните и когда уже поговорили, возвращаетесь к той странице, на которой остановились.

Программы в C++ работают так же. Иногда, когда программа выполняет код, она может столкнуться с вызовом функции (function call). Вызов функции – это выражение, которое указывает процессору прервать текущую функцию и выполнить другую. Процессор «оставляет закладку» в текущей точке выполнения, а затем вызывает (выполняет) определенную функцию. Когда выполнение вызываемой функции завершается, процессор возвращается к месту, где «осталась закладка» и возобновляет выполнение.

Функция, в которой находится вызов — называется caller, а функция, которую вызывали – callee (либо вызываемая функция).

Ниже приведен пример программы с вызовом функции:

Программа выведет:

Starting main()
In doPrint()
Ending main()

Эта программа начинает выполнение с функции main() и первая строка выводит текст Starting main(). Вторая строка вызывает функцию doPrint(). На этом этапе, выполнение инструкций в main() приостанавливается и процессор переходит к doPrint(). Первая (и единственная) строка в doPrint() выводит текст In doPrint(). Когда doPrint() завершает выполнение, caller (main ()) возобновляет выполнение с места остановки. Следовательно, следующая инструкция – вывод строки Ending main().

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

Возвращаемые значения

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

Функции, которые вы пишите, также могут возвращать значения. Для этого нужно установить тип возвращаемого значения (return type). Он указывается при объявлении функции, перед её именем.

Тип возвращаемого значения void (в переводе «пустота») означает, что функция не возвращает значение. Тип int означает, что функция возвращает целочисленное значение.

Теперь давайте объединим эти функции в программе:

Первый вызов — функция return5(). Возвращаем значение 5 обратно в caller, который передает это в cout.

Второй вызов — функция return5() выполняется и возвращает значение 5 обратно. Выражение 5 + 2 вычисляется в 7. Значение 7 передается в cout.

Третий вызов — функция returnNothing(). Функция ничего не делает и ничего не возвращает, поэтому выполнение переходит обратно в main().

Четвертый вызов — функция return5(). Значение 5 возвращается в main(), но main() ничего не делает с возвращаемым значением, так что оно отбрасывается.

Пятый вызов — функция returnNothing(). Здесь возвращается void (ничего). Ничего через cout выводится не может и при попытке компиляции мы получим ошибку. Вам нужно будет закомментировать эту строчку.

Один из самых задаваемых вопросов: «Может ли моя функция возвращать несколько значений, используя return?». Ответ: «Нет». Функции могут возвращать только одно значение. Тем не менее, есть способы обойти эту проблему, о них мы поговорим, когда будем детальнее разбирать тему «Функции».

Возвращаемое в main()

Когда выполняется программа, операционная система делает вызов функции main() и начинается её выполнение. Инструкции в main() выполняются последовательно. В конце main() возвращает целое значение (обычно 0) обратно в операционную систему. Поэтому main() объявляется как int main().

Почему нужно возвращать значение обратно в операционную систему? Возвращаемое значение – это код состояния и он сообщает операционной системе — успешно ли выполнена программа. Обычно, возвращаемое значение 0 (нуль) — означает успех, а любое другое — неудачу.

Обратите внимание, что по умолчанию C++, функция main() должна возвращать целочисленное число (int). Однако, если вы не записали return в конце main(), компилятор вернет 0 от вашего имени автоматически, если не будет ошибок.

Повторное использование функций

Одну и ту же функцию можно вызывать несколько раз, что очень полезно.

Программа выведет следующее:

Enter an integer: 5
Enter an integer: 7
5 + 7 = 12

Здесь main() прерывается 2 раза. Обратите внимание, что в обоих случаях, полученное значение, которое мы сохраняем в переменной а, передается обратно в main() с помощью return, а затем присваивается переменной х или у!

Также main() не является единственной функцией, которая может вызывать другие. Любая функция может вызвать любую другую функцию!

Результат:

Starting main()
A
B
Ending main()

Вложенные функции

В С++ функции не могут объявляться внутри других функций (быть вложенными). Следующая программа неправильна:

Правильно вот так:

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (69 оценок, среднее: 4,77 из 5)
Загрузка...
Поделиться в:
Подписаться на обновления:

Комментариев: 2

  1. Алексей:

    Тут не хватает «{»
    У вас не поставлена=)
    void doPrint()
    std::cout << "In doPrint()" << std::endl;
    }

    1. Li4ik:

      Спасибо, исправил.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *