Функция нужна, когда кусок логики хочется назвать и использовать повторно. Если программа два раза считает скидку, не нужно копировать формулу. Лучше сделать функцию calculateDiscount
Функции делают код короче, понятнее и безопаснее: ошибку исправляешь в одном месте
- Первая функция
- Функция с параметром
- Функция с return
- Расчет скидки
- Объявление функции до main
- Передача по значению и по ссылке
- Частые ошибки
- Забыли тип возвращаемого значения
- Возвращают значение из void
- Функция объявлена после main без прототипа
- Слишком много логики в main
- Мини-задание
- Ответы на эти вопросы могут быть для вас полезными
- Что такое функция в C++?
- Что значит void?
- Что делает return?
- Зачем нужны параметры?
- Когда использовать ссылку?
- Что почитать дальше по C++
Первая функция
#include <iostream>
void sayHello() {
std::cout << "Привет из функции" << std::endl;
}
int main() {
sayHello();
return 0;
}
void означает, что функция ничего не возвращает. Она просто выполняет действие
Функция с параметром
#include <iostream>
#include <string>
void sayHello(std::string name) {
std::cout << "Привет, " << name << std::endl;
}
int main() {
sayHello("Анна");
sayHello("Игорь");
return 0;
}
name — параметр функции. При каждом вызове значение может быть разным
Функция с return
double calculateTotal(int count, double price) {
return count * price;
}
Эта функция возвращает double
Полный пример:
#include <iostream>
double calculateTotal(int count, double price) {
return count * price;
}
int main() {
double total = calculateTotal(3, 1200.0);
std::cout << "Итого: " << total << std::endl;
return 0;
}
Расчет скидки
double calculateDiscount(double total, double percent) {
return total * percent / 100;
}
double calculateFinalTotal(double total, double discount) {
return total - discount;
}
Использование:
#include <iostream>
double calculateDiscount(double total, double percent) {
return total * percent / 100;
}
double calculateFinalTotal(double total, double discount) {
return total - discount;
}
int main() {
double total = 5000.0;
double discount = calculateDiscount(total, 10.0);
double finalTotal = calculateFinalTotal(total, discount);
std::cout << "Скидка: " << discount << std::endl;
std::cout << "К оплате: " << finalTotal << std::endl;
return 0;
}
Теперь формулы названы. Код в main стал читаться проще
Объявление функции до main
C++ должен знать о функции до ее вызова. Поэтому функцию часто пишут выше main
Можно иначе: сначала объявить прототип:
double calculateTotal(int count, double price);
Потом main, потом реализация:
#include <iostream>
double calculateTotal(int count, double price);
int main() {
std::cout << calculateTotal(2, 1500.0) << std::endl;
return 0;
}
double calculateTotal(int count, double price) {
return count * price;
}
В больших проектах объявления часто выносят в .h файлы, реализации — в .cpp
Передача по значению и по ссылке
Обычный параметр копируется:
void increase(int value) {
value++;
}
Исходная переменная не изменится
Ссылка меняет исходное значение:
void increase(int& value) {
value++;
}
Пример:
#include <iostream>
void increase(int& value) {
value++;
}
int main() {
int count = 5;
increase(count);
std::cout << count << std::endl;
return 0;
}
Вывод будет 6
Для новичка правило такое: если функция должна вернуть новый результат, используй return. Если должна изменить переданную переменную, можно использовать ссылку, но не злоупотребляй
Частые ошибки
Забыли тип возвращаемого значения
Неправильно:
calculateTotal(int count, double price) {
return count * price;
}
Правильно:
double calculateTotal(int count, double price) {
return count * price;
}
Возвращают значение из void
void getTotal() {
return 10;
}
void ничего не возвращает. Если нужен результат, укажи тип
Функция объявлена после main без прототипа
Компилятор может не знать функцию в момент вызова. Пиши функцию выше main или добавляй прототип
Слишком много логики в main
Если main разросся на сто строк, пора выносить куски в функции
Мини-задание
Сделай функции:
Пример:
void printOrder(double total, double discount, double finalTotal) {
std::cout << "Сумма: " << total << std::endl;
std::cout << "Скидка: " << discount << std::endl;
std::cout << "К оплате: " << finalTotal << std::endl;
}
Ответы на эти вопросы могут быть для вас полезными
Что такое функция в C++?
Это именованный блок кода, который можно вызвать. Функция может принимать параметры и возвращать результат
Что значит void?
void означает, что функция не возвращает значение
Что делает return?
return завершает функцию и возвращает значение вызывающему коду
Зачем нужны параметры?
Чтобы передавать функции данные. Одна функция может работать с разными значениями
Когда использовать ссылку?
Когда функция должна изменить исходную переменную или когда копирование большого объекта нежелательно. Новичку лучше начинать с обычных параметров и return
Что почитать дальше по C++
Чтобы тема складывалась в понятный маршрут, рядом лучше открыть:
- C++ с нуля: первый файл, переменные и вывод — повторить основу программы до разбиения на функции.
- Массивы в C++ на примерах — потренироваться передавать массивы и vector.
- Указатели в C++ без паники — разобрать ссылки и указатели в параметрах.
- Классы и ООП в C++: первый пример без перегруза — перейти от функций к методам класса.



