Перегрузка функций
Что такое перегрузка
В C++ можно объявить несколько функций с одинаковым именем, если их списки параметров различаются.
int Add(int a, int b) { return a + b;}double Add(double a, double b) { return a + b;}Компилятор выбирает подходящую перегрузку по аргументам вызова.
Чем можно различаться
Перегрузки могут отличаться количеством параметров, типами параметров или их порядком. Нельзя перегрузить функцию только по возвращаемому типу:
int Read();// double Read(); // ошибка: параметры те жеНеоднозначность
Если несколько вариантов одинаково подходят после преобразований типов, вызов будет неоднозначным. Избегай перегрузок, которые требуют от пользователя угадывать, какую версию выберет компилятор.
void Print(long value);void Print(double value);// Print(1); может выбрать целочисленную конверсию согласно правилам разрешения перегрузкиПри необходимости укажи тип явно: Print(1L) или Print(1.0).
Перегрузка по const и ссылке
Для классов могут существовать разные методы в зависимости от того, является ли объект константным. Также функции могут принимать T& и const T&, но при проектировании нужно следить за неоднозначностью.
Когда применять
Перегрузка уместна, когда разные варианты выполняют одну концептуальную операцию: например, Print(int) и Print(std::string). Не используй одинаковое имя для действий с разным смыслом.
Итог
Перегрузка делает интерфейс удобнее, когда семантика функции остаётся общей. Возвращаемый тип сам по себе не создаёт отдельную перегрузку.
