Перегрузка функций в C++: практическое руководство
Перегрузка функций в C++
Узнайте, как C++ позволяет определять несколько функций с одинаковым именем, но разными сигнатурами, на практических примерах.
В C++ две функции могут иметь одно имя, если их списки параметров отличаются по типу, количеству или порядку. Такие варианты называются перегруженными функциями.
Например:
// То же имя, разные аргументы
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }
Все четыре объявления выше образуют валидный набор перегрузок. Обратите внимание: типы возврата не учитываются при разрешении перегрузки; важен только список параметров. Например:
// Ошибка компиляции: идентичные сигнатуры
int test(int a) { }
double test(int b){ }
Здесь обе функции имеют одно имя, тот же тип и то же число аргументов, поэтому компилятор отвергает дубликат.
Пример 1: перегрузка с разными типами параметров
// Вычисление абсолютного значения для int и float
#include <iostream>
using namespace std;
// версия для float
float absolute(float var){
return (var < 0.0f) ? -var : var;
}
// версия для int
int absolute(int var){
return (var < 0) ? -var : var;
}
int main(){
cout << "Absolute value of -5 = " << absolute(-5) << endl;
cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
return 0;
}
Результат
Absolute value of -5 = 5 Absolute value of 5.5 = 5.5
Эта программа перегружает absolute(); компилятор выбирает подходящую версию на основе типа аргумента.
Пример 2: перегрузка с разным количеством параметров
#include <iostream>
using namespace std;
// Два параметра
void display(int var1, double var2){
cout << "Integer: " << var1;
cout << " & Double: " << var2 << endl;
}
// Один double параметр
void display(double var){
cout << "Double: " << var << endl;
}
// Один int параметр
void display(int var){
cout << "Integer: " << var << endl;
}
int main(){
int a = 5;
double b = 5.5;
display(a);
display(b);
display(a, b);
return 0;
}
Результат
Integer: 5 Double: 5.5 Integer: 5 & Double: 5.5
Вызов display() разрешается в правильную перегрузку на основе числа и типов аргументов.
Примечание: Стандартные библиотечные функции вроде sqrt() сильно перегружены, принимая int, float, double и другие типы, обеспечивая гибкость разработчикам.
Язык C
- Освоение перегрузки методов в C#: концепции, примеры и лучшие практики
- Освоение перегрузки конструкторов в C#
- Освоение операторов C++: полное руководство с практическими примерами
- Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
- Как передавать массивы в функции в C++: практическое руководство
- Дружественные функции и классы в C++: мастерство контроля доступа
- Как передавать одномерные и двумерные массивы в функции в C — практическое руководство
- Перегрузка операторов в C++: практическое руководство с примерами кода
- Функции в C++: подробное объяснение с практическими примерами кода
- Функции в C: объявление, определение, вызов, аргументы (по значению и по ссылке), рекурсия