Функции в C++: подробное объяснение с практическими примерами кода
Что такое функция в C++?
Функция в C++ — это самодостаточный блок кода, который принимает входные данные, обрабатывает их и возвращает результат. Инкапсулируя повторяющиеся задачи в функцию, разработчики избегают дублирования кода и могут легко переиспользовать логику в разных частях программы, просто передавая другие параметры.
Каждое C++-приложение содержит как минимум одну функцию: main(). Остальной код можно организовать в более мелкие, специализированные функции, что повышает читаемость и поддерживаемость.
Современный C++ предоставляет богатый набор встроенных функций в стандартной библиотеке. Их можно вызывать напрямую, не пиша реализацию самостоятельно.
В этом руководстве вы узнаете:
- Что такое функция в C++
- Зачем нужны функции
- Встроенные библиотечные функции
- Пользовательские функции
- Объявление функции и прототип
- Определение функции
- Синтаксис и структура
- Как вызвать функцию
- Передача аргументов
Зачем использовать функции?
Функции дают множество преимуществ:
- Группируют связанные инструкции, делая код легче для чтения и понимания.
- Устраняют повторения, снижая вероятность ошибок.
- Обеспечивают повторное использование кода в разных частях программы — или даже в разных проектах — простым вызовом той же функции.
Встроенные функции
Функции стандартной библиотеки предопределены и готовы к использованию. Вы просто вызываете их, не предоставляя реализацию.
Пример 1: Использование sqrt() из cmath
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double num, squareRoot;
cout << "Введите число: ";
cin >> num;
squareRoot = sqrt(num);
cout << "Квадратный корень из " << num << " равен: " << squareRoot;
return 0;
}
Вывод:

Скриншот запущенной программы:

Разбор кода:
- Подключаем
iostreamдля ввода/вывода. - Подключаем
cmathдля доступа кsqrt(). - Используем пространство имён
std, чтобы не писать префиксstd::. - Определяем функцию
main(), где находится логика программы. - Объявляем
numиsquareRootкакdouble. - Запрашиваем у пользователя число.
- Считываем ввод в
num. - Вызываем
sqrt()для вычисления квадратного корня. - Выводим результат.
- Возвращаем 0, сигнализируя об успешном завершении.
Пользовательские функции
Разработчики могут создавать собственные функции для инкапсуляции логики, специфичной для их приложения.
Пример 2: Простая функция приветствия
#include <iostream>
using namespace std;
void sayHello() {
cout << "Привет!";
}
int main() {
sayHello();
return 0;
}
Вывод:

Скриншот кода:

Пояснение:
- Подключаем
iostreamдля консольного ввода/вывода. - Вводим пространство имён
stdв область видимости. - Определяем
sayHello(), функцию, выводящую приветствие. - Вызываем
sayHello()изmain(). - Возвращаем 0 для указания успешного завершения.
Объявление функции / прототип
Когда функция определена после main(), компилятору нужно заранее знать её сигнатуру. Прототип предоставляет эту информацию без тела функции.
Пример прототипа:
int addFunc(int, int);
Требуются только тип возвращаемого значения, имя функции и типы параметров; имена параметров необязательны.
Определение функции
В то время как прототип сообщает компилятору об интерфейсе функции, определение предоставляет исполняемое тело.
Пример определения:
int addFunc(int num1, int num2) {
return num1 + num2;
}
Синтаксис
return_type function_name(parameter_list) {
// тело функции
}
Ключевые компоненты:
- return_type — тип возвращаемого значения (используйте
void, если ничего не возвращается). - function_name — идентификатор, входящий в сигнатуру функции.
- parameter_list — ноль или более типизированных параметров.
- function body — инструкции, выполняющие задачу.
Вызов функции
Для выполнения функции необходимо вызвать её по имени и передать требуемые аргументы.
Пример вызова:
int result = addFunc(3, 5);
Передача аргументов
Аргументы должны соответствовать списку параметров функции по количеству и типу. Несоответствие вызывает ошибку компиляции.
Значения параметров по умолчанию могут быть указаны, позволяя вызывающим сторонам опускать эти аргументы.
Пример 3: Сложение двух чисел с прототипом
#include <iostream>
using namespace std;
int addFunc(int, int); // прототип
int main() {
int x, y, sum;
cout << "Введите два числа: ";
cin >> x >> y;
sum = addFunc(x, y);
cout << "Сумма " << x << " и " << y << " равна: " << sum;
return 0;
}
int addFunc(int num1, int num2) {
return num1 + num2;
}
Вывод:

Скриншот:

Пояснение:
- Подключаем необходимые заголовочные файлы и пространства имён.
- Объявляем прототип для
addFunc(). - Считываем два целых числа от пользователя.
- Вызываем
addFunc()с этими значениями и сохраняем результат. - Выводим сумму.
- Определяем
addFunc()послеmain(), предоставляя логику сложения двух параметров.
Итог
- Функции группируют связанный код в повторно используемые блоки.
- Они уменьшают дублирование и улучшают ясность кода.
- Встроенные библиотечные функции доступны через заголовочные файлы; пользовательские функции требуют объявления и определения.
- Прототипы функций информируют компилятор до фактического определения.
- Соответствие количества и типов аргументов обязательно; аргументы по умолчанию дают гибкость.
Язык C
- Цикл do-while в C++: синтаксис, примеры и вложенные циклы
- Указатели в C++: концепции, примеры и практические применения
- Тип данных char в C++: объявление, ASCII и методы преобразования
- Перегрузка операторов в C++: практическое руководство с примерами кода
- calloc() в C: выделение обнулённой памяти и практический пример
- Освоение лямбда-функций Python: практические примеры и лучшие практики
- Функция round() в Python: подробное объяснение с практическими примерами
- Освоение функции map() в Python: синтаксис, примеры и лучшие практики
- Мастерство функций в Verilog для эффективного RTL дизайна
- Функции в C: объявление, определение, вызов, аргументы (по значению и по ссылке), рекурсия