Перейти к содержанию

Шаблоны функций и классов

Начало урока

Шаблоны функций и классов

Напишите код один раз, а компилятор создаст версию для каждого типа

Главная идея: шаблон - это чертёж для кода. Вместо того чтобы писать один max для int, другой для double и третий для std::string, вы пишете одну универсальную версию, параметризованную по типу. Когда вы её используете, компилятор сам генерирует нужную конкретную функцию или класс. Это ключевой механизм обобщённого программирования в C++, и вся стандартная библиотека шаблонов (STL) построена на нём.
К концу урока вы сможете:
  • писать шаблоны функций с одним или несколькими параметрами-типами,
  • позволять компилятору выводить аргументы шаблона или задавать их явно,
  • писать шаблоны классов, например обобщённые Pair или Stack,
  • использовать нетиповые параметры шаблона (например, размер, известный на этапе компиляции),
  • объяснять, что такое инстанцирование и почему код шаблонов находится в заголовочных файлах.

1. Какую проблему решают шаблоны?

Представьте, что вам нужна функция, возвращающая большее из двух значений. Без шаблонов вы копируете одну и ту же логику для каждого типа:

int    maxOf(int a, int b)       { return (a > b) ? a : b; }
double maxOf(double a, double b) { return (a > b) ? a : b; }
std::string maxOf(std::string a, std::string b) { return (a > b) ? a : b; }

Тела идентичны, различается только тип. Это дублирование, готовое «протухнуть»: исправите ошибку в одном месте - забудете про другие. Шаблон позволяет описать форму кода и оставить тип пустым местом, которое заполнят позже.

Аналогия: представьте формочку для печенья. Формочка - это не печенье, а форма. Прижмите её к тесту (int) - получите функцию «формы int»; прижмите к другому тесту (std::string) - получите функцию «формы string». Формочка (шаблон) написана один раз; компилятор по требованию штампует конкретное печенье (реальные функции).

Шаблоны разрешаются целиком на этапе компиляции. За обобщённость нет платы во время выполнения - каждая сгенерированная версия так же быстра, как если бы вы написали её вручную.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя