Перейти к содержимому
На этой странице

Шаблон класса

Все темы C++ Developer

Что такое шаблонный класс и шаблонная функция?

В C++, шаблонный класс и шаблонная функция позволяют писать код, который работает с различными типами данных, не завися от конкретного типа на момент написания кода.

Шаблонный класс — это класс, определённый с использованием шаблона, который позволяет пользователю определить одну структуру класса для обработки различных типов данных. Например, класс std::vector<T> может использовать любой тип T для хранения массива данных.

Шаблонная функция — это функция, написанная таким образом, чтобы она могла выполнять одну и ту же операцию на разных типах данных без изменения самой функции. Например, функция для сравнения двух значений T max(T a, T b) может сравнивать числа, строки или любые другие типы, поддерживающие оператор сравнения.


Что такое конструкторы? Какие типы вы знаете?

Конструкторы в программировании — это специальные методы класса, используемые для инициализации объектов этого класса. Они вызываются автоматически при создании нового объекта. В языке C++ и других объектно-ориентированных языках существуют различные типы конструкторов:

  1. Конструктор по умолчанию: не принимает никаких аргументов и устанавливает начальные значения для объекта. Если программист не определил ни одного конструктора, компилятор может автоматически создать конструктор по умолчанию.

  2. Конструктор с параметрами: принимает один или несколько аргументов и использует их для инициализации объекта. Это позволяет создать объект с конкретными начальными значениями.

  3. Конструктор копирования: принимает ссылку на объект того же класса и инициализирует новый объект значениями из существующего объекта. Используется, например, при передаче объекта функции или возврате объекта из функции.

  4. Конструктор перемещения: позволяет инициализировать объект с использованием временного объекта (rvalue), перемещая его данные, а не копируя. Это ускоряет инициализацию и снижает затраты ресурсов.


Расскажите об имплементации шаблонных классов в срр-файле

Имплементация шаблонных классов в C++ обычно делается в заголовочных файлах (header files, .h), а не в .cpp файлах. Это связано с особенностями компиляции шаблонов. Вот основные шаги для имплементации шаблонного класса:

  1. Объявление шаблонного класса:

    • В заголовочном файле объявляется шаблонный класс.
    // MyTemplate.h
    #ifndef MYTEMPLATE_H
    #define MYTEMPLATE_H
    
    template<typename T>
    class MyTemplate {
    public:
        MyTemplate(T value);
        void display() const;
    
    private:
        T value;
    };
    
    #include "MyTemplate.cpp" // Включение реализации
    #endif
  2. Реализация шаблонного класса:

    • Реализация методов шаблонного класса также помещается в заголовочный файл или в отдельный .cpp файл, который включается в конец заголовочного файла.
    // MyTemplate.cpp
    #include "MyTemplate.h"
    #include <iostream>
    template<typename T>
    MyTemplate<T>::MyTemplate(T value) : value(value) {}
    
    template<typename T>
    void MyTemplate<T>::display() const {
        std::cout << value << std::endl;
    }

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

Собеседования: C++

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: C++-разработчик, Разработчик системного ПО. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.