В этом уроке мы подробно рассмотрим параметры и аргументы функций в C++, а также различные способы их передачи и использования.

Параметры и аргументы: в чем разница?

Параметры - это переменные, указанные в объявлении функции.

Аргументы - это фактические значения, передаваемые функции при ее вызове.

void printSum(int a, int b) { // a и b - параметры
    std::cout << "Сумма: " << a + b << std::endl;
}

int main() {
    printSum(5, 3); // 5 и 3 - аргументы
    return 0;
}

Передача по значению

При передаче по значению создается копия аргумента, и функция работает с этой копией.

void modifyValue(int x) {
    x = 10; // изменяет только локальную копию
}

int main() {
    int num = 5;
    modifyValue(num);
    std::cout << num; // выведет 5
    return 0;
}

Передача по ссылке

При передаче по ссылке функция работает напрямую с оригинальной переменной.

void modifyValue(int &x) {
    x = 10; // изменяет оригинальную переменную
}

int main() {
    int num = 5;
    modifyValue(num);
    std::cout << num; // выведет 10
    return 0;
}

Передача по константной ссылке

Используется для эффективной передачи больших объектов без возможности их изменения.

void printValue(const int &x) {
    std::cout << x << std::endl;
    // x = 10; // Ошибка! Нельзя изменить константную ссылку
}

int main() {
    int num = 5;
    printValue(num);
    return 0;
}

Параметры по умолчанию

C++ позволяет задавать значения параметров по умолчанию.

void printMessage(std::string msg = "Привет") {
    std::cout << msg << std::endl;
}

int main() {
    printMessage(); // выведет "Привет"
    printMessage("Здравствуйте"); // выведет "Здравствуйте"
    return 0;
}

Важно: Параметры со значениями по умолчанию должны быть объявлены последними в списке параметров.

Перегрузка функций

C++ поддерживает перегрузку функций, позволяя создавать несколько функций с одним именем, но разными параметрами.

int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

int main() {
    std::cout << add(5, 3) << std::endl;      // вызовет int версию
    std::cout << add(3.14, 2.86) << std::endl; // вызовет double версию
    return 0;
}

Передача массивов в функции

При передаче массива в функцию, фактически передается указатель на его первый элемент.

void printArray(int arr[], int size) {
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    printArray(numbers, 5);
    return 0;
}

Заключение

Правильное использование параметров и аргументов функций позволяет создавать гибкий и эффективный код. Выбор метода передачи (по значению, по ссылке или по константной ссылке) зависит от конкретной задачи и требований к производительности.

Перейти к следующему уроку →