Easyперегрузка

Что такое перегрузка функций (overloading)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Overloading — несколько функций с одним именем, но разными параметрами (количеством или типами). Компилятор выбирает нужную через overload resolution: точное совпадение > стандартные преобразования > user-defined > variadic.

void print(int x);
void print(double x);
void print(int x, int y);
void print(const std::string& s);

print(42);        // print(int)
print(3.14);      // print(double)
print(1, 2);      // print(int, int)
  • Возвращаемый тип в разрешении не участвует (нельзя перегружать только по возврату);
  • Перегрузки должны быть в одной области видимости (иначе — hiding rule);
  • Перегрузку операторов можно делать для пользовательских типов.

Перегрузки можно делать шаблонами, но resolution между шаблонами и не-шаблонами сложна.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.