Функции в С++

Что, зачем и почему

Функция — часть кода, доступная из разных частей программы и содержащая некоторые инструкции, выполняемые только в случае вызова этой функции.

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

#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 куда более чистым и читаемым
  • Могут принимать различные параметры и выполнять операции над ними
  • Могут возвращать значения, которые можно как либо обработать и использовать дальше
Last change: 2023-10-09, commit: e10ec54