Функции в 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. Startn";
cout << "2. Settingsn";
cout << "0. Exitn";
}
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;
}
Такую функцию легко переиспользовать: для возраста, процента скидки, уровня сложности и других проверок.
Типичные ошибки новичков
sum(2, 3), неправильно: sum(int 2, int 3).const&.Рекомендации по стилю
calculateTotal, printMenu, isValid.bool.Итог
Функции в C++ позволяют писать более чистый, понятный и переиспользуемый код. Начните с простых функций, затем добавляйте параметры, возвращаемые значения, ссылки, const& и перегрузку. Чем раньше вы привыкнете выделять отдельные действия в функции, тем проще будет переходить к ООП, STL и реальным проектам.




