В этом уроке мы подробно рассмотрим параметры и аргументы функций в 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;
}
Заключение
Правильное использование параметров и аргументов функций позволяет создавать гибкий и эффективный код. Выбор метода передачи (по значению, по ссылке или по константной ссылке) зависит от конкретной задачи и требований к производительности.