Функции в С++
Что, зачем и почему
Функция — часть кода, доступная из разных частей программы и содержащая некоторые инструкции, выполняемые только в случае вызова этой функции.
Зачем нам вообще нужна функции? Функции помогают избежать многократного написания одного и того же кода. Для простоты понимания давайте рассмотрим простейшую программу:
#include <iostream>
int max(int x, int y) { // объявили функцию max типа int которая принимает два
// параметра типа int
if (x > y)
return x; // возвращает значение x если выполняется условие x > y
else
return y; // возвращает значение y если не выполнился if выше
}
int main() {
int a = 10, b = 20;
int m = max(a, b); // вызвали функцию и сохранили в переменную
cout << "m is " << m; // вывели результат функции
return 0;
}
Разберем эту программу по частям. Сперва мы создаем функцию типа int, принимающую параметры x и y, оба имеющие тип данных int. Как вы уже заметили, функция имеет тип данных int, что означает, что после выполнения каких-либо условий, она обязана вернуть целое число.
Если в функции сработает инструкция return, то функция прекратит свою работу. Она отправит возвращаемое значение в main или любую другую часть кода, откуда была вызвана и завершит работу. Важно помнить, что переменные, созданные в функции, перестают существовать вместе с функцией!
Теперь поговорим о параметрах х и у. Так как объявление функции max находится вне основной функции main, то функция max не имеет доступа к переменным, созданных в main. Тогда как функция max узнает, с какими параметрами ей работать? Для этого при вызове функции int m = max(a, b); в скобках мы указываем два параметра, которые мы хотим отправить в функцию. Заметим, что т.к. тип функции max - int, то результат функции - целое число, и мы можем сохранить результат работы нашей функции в целочисленную переменную, в данном случае - в переменную m.
Типы функций
Функции в C++ можно разделить на две большие группы:
- Функции, возвращающие что-либо. Могут иметь тип и возвращать int, float, struct и вообще любой тип данных
- Функции, не возвращающие ничего. Всегда при объявлении имеют тип void. Могут принимать параметры и изменять их, но не возвращают значений, соответственно, результат работы функции нельзя сохранить в переменную
Подведем итоги
Как вы заметили, в примере выше с функцией максимума двух чисел, код в main выглядит очень опрятно и понятно. А теперь представьте, если бы нам нужно было сравнить не одну пару,а 10. Без функций мы бы написали 10 * 4 строк одних только сравнений, а что, если бы нужно было делать что-то, куда более объемное, нежели сравнение двух чисел? Используя функции, мы бы лишь тратили строку на вызов функции, и строку на вывод результата. Даже в примере с крохотной max мы бы написали в 2 раза меньше кода в main!
Итак, давайте составим краткий список особенностей и фактов о функциях
- Помогают избежать многократного написания одинакового кода
- Помогают сделать код в main куда более чистым и читаемым
- Могут принимать различные параметры и выполнять операции над ними
- Могут возвращать значения, которые можно как либо обработать и использовать дальше