Функции в C++: объявление, параметры и возвращаемые значения — практическое руководство
Функции в C++ — одна из базовых тем, без которой сложно писать даже небольшие программы. Если переменные хранят данные, то функции описывают действия: посчитать скидку, проверить ввод, вывести меню, найти максимум, преобразовать строку и т.д.
Поисковый запрос, под который написана статья: «функции в C++ для начинающих». Ниже — практическое руководство с примерами, которые можно сразу запускать и изменять.
Что такое функция в C++
Функция — это именованный блок кода, который можно вызвать из другого места программы. У функции обычно есть:
- тип возвращаемого значения — что функция отдаёт наружу;
- имя — как мы её вызываем;
- параметры — входные данные;
- тело — команды, которые выполняются.
#include <iostream>
using namespace std;
int sum(int a, int b) {
return a + b;
}
int main() {
cout << sum(3, 5); // 8
return 0;
}
Здесь sum принимает два числа типа int и возвращает их сумму.
Объявление и определение функции
В C++ функцию можно сначала объявить, а определить позже. Это полезно, когда main() находится выше остальных функций или когда проект разделён на несколько файлов.
#include <iostream>
using namespace std;
int multiply(int a, int b); // объявление, или прототип
int main() {
cout << multiply(4, 6);
return 0;
}
int multiply(int a, int b) { // определение
return a * b;
}
Объявление сообщает компилятору: «такая функция существует». Определение содержит реальный код функции.
Функции без возвращаемого значения: void
Если функция ничего не возвращает, используется тип void. Частый пример — вывод информации на экран.
#include <iostream>
using namespace std;
void printMenu() {
cout << "1. Start\n";
cout << "2. Settings\n";
cout << "0. Exit\n";
}
int main() {
printMenu();
return 0;
}
Внутри void-функции можно использовать return; без значения, чтобы досрочно завершить выполнение.
Передача параметров: по значению
По умолчанию параметры передаются по значению. Это значит, что функция получает копию переменной. Оригинал не изменяется.
#include <iostream>
using namespace std;
void addTen(int x) {
x += 10;
}
int main() {
int number = 5;
addTen(number);
cout << number; // 5, а не 15
return 0;
}
Такой способ безопасен, но для больших объектов копирование может быть дорогим.
Передача по ссылке
Если нужно изменить исходную переменную, используйте ссылку &.
#include <iostream>
using namespace std;
void addTen(int& x) {
x += 10;
}
int main() {
int number = 5;
addTen(number);
cout << number; // 15
return 0;
}
Передача по ссылке удобна, но применяйте её осознанно: вызывающий код должен понимать, что переменная может измениться.
const-ссылка: эффективно и безопасно
Если объект большой и менять его не нужно, используйте const-ссылку. Это частый профессиональный приём.
#include <iostream>
#include <string>
using namespace std;
void greet(const string& name) {
cout << "Привет, " << name << "!\n";
}
int main() {
string user = "Анна";
greet(user);
return 0;
}
const string& не копирует строку и запрещает менять её внутри функции.
Возврат значения из функции
Функция может возвращать не только числа, но и логические значения, строки, структуры и объекты.
#include <iostream>
using namespace std;
bool isAdult(int age) {
return age >= 18;
}
int main() {
int age = 20;
if (isAdult(age)) {
cout << "Доступ разрешён";
} else {
cout << "Доступ запрещён";
}
return 0;
}
Совет: функция должна делать одну понятную вещь. Например, isAdult только проверяет возраст, а не выводит меню и не читает данные с клавиатуры.
Параметры по умолчанию
В C++ можно задать значение параметра по умолчанию. Тогда аргумент при вызове можно не передавать.
#include <iostream>
using namespace std;
void printLine(char symbol = '-', int count = 10) {
for (int i = 0; i < count; ++i) {
cout << symbol;
}
cout << '\n';
}
int main() {
printLine(); // ----------
printLine('*', 5); // *****
return 0;
}
Важно: параметры со значениями по умолчанию должны идти справа. Нельзя задать значение первому параметру и не задать второму.
Перегрузка функций
Перегрузка функций позволяет создавать несколько функций с одним именем, но разными параметрами.
#include <iostream>
using namespace std;
int maxValue(int a, int b) {
return (a > b) ? a : b;
}
double maxValue(double a, double b) {
return (a > b) ? a : b;
}
int main() {
cout << maxValue(3, 7) << '\n'; // int-версия
cout << maxValue(2.5, 1.8) << '\n'; // double-версия
return 0;
}
Компилятор выбирает подходящую функцию по типам и количеству аргументов.
Практический пример: проверка корректного ввода
Функции особенно полезны, когда один и тот же код нужен несколько раз. Например, сделаем функцию, которая проверяет, входит ли число в диапазон.
#include <iostream>
using namespace std;
bool inRange(int value, int min, int max) {
return value >= min && value <= max;
}
int main() {
int rating;
cout << "Введите оценку от 1 до 5: ";
cin >> rating;
if (!inRange(rating, 1, 5)) {
cout << "Ошибка: оценка вне диапазона";
return 1;
}
cout << "Оценка сохранена";
return 0;
}
Такую функцию легко переиспользовать: для возраста, процента скидки, уровня сложности и других проверок.
Типичные ошибки новичков
- Забыли return в функции, которая должна вернуть значение.
- Перепутали объявление и вызов: при вызове типы писать не нужно. Правильно:
sum(2, 3), неправильно:sum(int 2, int 3). - Слишком большая функция: если функция занимает десятки строк и делает всё сразу, её стоит разбить.
- Неочевидное изменение параметров: если функция меняет аргумент по ссылке, это должно быть понятно из имени или документации.
- Копирование больших объектов: для строк, контейнеров и своих классов часто лучше использовать
const&.
Рекомендации по стилю
- Называйте функции глаголами или понятными действиями:
calculateTotal,printMenu,isValid. - Держите функцию короткой: одна функция — одна задача.
- Для проверок используйте возвращаемый тип
bool. - Не злоупотребляйте глобальными переменными: передавайте данные через параметры.
- Если хотите системно разобраться в синтаксисе, задачах и практике, посмотрите курс «Программирование на C++ с Нуля до Гуру» с пошаговыми заданиями.
Итог
Функции в C++ позволяют писать более чистый, понятный и переиспользуемый код. Начните с простых функций, затем добавляйте параметры, возвращаемые значения, ссылки, const& и перегрузку. Чем раньше вы привыкнете выделять отдельные действия в функции, тем проще будет переходить к ООП, STL и реальным проектам.
-
Создано 22.07.2026 17:00:53
-
Михаил Русаков

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.