Функции в C++: как убрать повтор кода

Функция нужна, когда кусок логики хочется назвать и использовать повторно. Если программа два раза считает скидку, не нужно копировать формулу. Лучше сделать функцию calculateDiscount

Функции делают код короче, понятнее и безопаснее: ошибку исправляешь в одном месте

Первая функция

#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++

Чтобы тема складывалась в понятный маршрут, рядом лучше открыть:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x