Функции в C++: объявление, параметры и возвращаемые значения — практическое руководство

Функции в C++: объявление, параметры и возвращаемые значения — практическое руководство

Функции в 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;
    }
    

    Такую функцию легко переиспользовать: для возраста, процента скидки, уровня сложности и других проверок.

    Типичные ошибки новичков

  • Забыли return в функции, которая должна вернуть значение.
  • Перепутали объявление и вызов: при вызове типы писать не нужно. Правильно: sum(2, 3), неправильно: sum(int 2, int 3).
  • Слишком большая функция: если функция занимает десятки строк и делает всё сразу, её стоит разбить.
  • Неочевидное изменение параметров: если функция меняет аргумент по ссылке, это должно быть понятно из имени или документации.
  • Копирование больших объектов: для строк, контейнеров и своих классов часто лучше использовать const&.
  • Рекомендации по стилю

  • Называйте функции глаголами или понятными действиями: calculateTotal, printMenu, isValid.
  • Держите функцию короткой: одна функция — одна задача.
  • Для проверок используйте возвращаемый тип bool.
  • Не злоупотребляйте глобальными переменными: передавайте данные через параметры.
  • Если хотите системно разобраться в синтаксисе, задачах и практике, посмотрите курс «Программирование на C++ с Нуля до Гуру» с пошаговыми заданиями.
  • Итог

    Функции в C++ позволяют писать более чистый, понятный и переиспользуемый код. Начните с простых функций, затем добавляйте параметры, возвращаемые значения, ссылки, const& и перегрузку. Чем раньше вы привыкнете выделять отдельные действия в функции, тем проще будет переходить к ООП, STL и реальным проектам.

    Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий