Функции в C++
Функции в C++: объявление, возвращаемое значение, параметры по значению и по ссылке, перегрузка и рекурсия.
Функция — именованный блок кода, который можно вызывать многократно. Это главный инструмент борьбы с дублированием.
Объявление и вызов
#include <iostream>
// тип_возврата имя(параметры) { тело }
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
std::cout << "Сумма: " << result << "\n";
return 0;
}
Вывод:
Сумма: 7
Функция без возвращаемого значения имеет тип void:
void greet(std::string name) {
std::cout << "Привет, " << name << "!\n";
}
// greet("Аня"); → Привет, Аня!
Передача по значению и по ссылке
По умолчанию параметры передаются по значению — функция получает копию. Изменения не затрагивают оригинал.
#include <iostream>
void doubleVal(int x) {
x *= 2; // меняем копию
}
void doubleRef(int &x) { // & — передача по ссылке
x *= 2; // меняем оригинал
}
int main() {
int a = 5;
doubleVal(a);
std::cout << a << "\n"; // 5 — не изменилось
doubleRef(a);
std::cout << a << "\n"; // 10 — изменилось!
return 0;
}
Вывод:
5 10
Передавайте большие объекты по константной ссылке
const T&— без копирования, но без риска изменить оригинал.
Перегрузка функций
C++ позволяет иметь несколько функций с одним именем, но разными параметрами. Компилятор выберет нужную автоматически.
#include <iostream>
int area(int side) { return side * side; }
double area(double width, double height) { return width * height; }
int main() {
std::cout << area(4) << "\n"; // 16 — квадрат
std::cout << area(3.0, 4.5) << "\n"; // 13.5 — прямоугольник
return 0;
}
Вывод:
16 13.5
Рекурсия
Функция может вызывать саму себя. Обязательно нужно базовое условие выхода, иначе — бесконечная рекурсия и переполнение стека.
#include <iostream>
int factorial(int n) {
if (n <= 1) return 1; // базовый случай
return n * factorial(n - 1);
}
int main() {
std::cout << factorial(5) << "\n"; // 5! = 120
return 0;
}
Вывод:
120
Коротко
- Функция:
тип имя(параметры) { return ...; }. Без возврата —void. - По значению — копия; по ссылке (
&) — оригинал. - Перегрузка: одно имя, разные сигнатуры — компилятор разберётся.
- Рекурсия требует базового условия выхода, иначе — stack overflow.
Проверьте себя
1. Что происходит при передаче параметра по значению?
AФункция работает с оригиналом
BФункция получает копию — изменения не затрагивают оригинал
CПередаётся адрес переменной
DКомпилятор выдаёт предупреждение
2. Какой тип возврата у функции, которая ничего не возвращает?
Anull
Bempty
Cvoid
Dnone
3. Что такое перегрузка функций?
AФункция, которая вызывает саму себя
BНесколько функций с одним именем, но разными параметрами
CФункция с более чем 10 параметрами
DОбъявление функции без тела