В предыдущем уроке были изучены шаблоны функций. Шаблоны функций позволяют передавать в функцию тип данных, который затем используется внутри неё. В этом уроке изучаются шаблоны классов – аналогичный механизм, но работающий с классами. Будет показано, как передавать тип данных в сам класс, создавая шаблон класса.
Создание шаблона класса
Рассмотрим структуру, аналогичную той, что использовалась в прошлом уроке. Используются угловые скобки < > для указания типа данных, передаваемого в класс. Вместо typename тип данных передаётся непосредственно в класс. Например:
template <typename Type>
class R {
private:
const int R_LEN = 3; // Размер массива
Type R_[R_LEN]; // Массив типа Type
public:
R(const Type a[]) {
for (int i = 0; i < R_LEN; ++i) {
R_[i] = a[i];
}
}
Type GetElement(int i) {
return R_[i];
}
};
Создан шаблон класса R, принимающий тип данных Type. В частной области объявлен массив R_ размером R_LEN (константа), хранящий элементы переданного типа. Конструктор класса инициализирует этот массив значениями, переданными в качестве аргумента. Функция GetElement возвращает элемент массива по заданному индексу.
Работа с шаблоном класса
Создадим массив целых чисел и массив символов:
int R[] = {45, 56, 6};
char R1[] = {'M', 'a', 'r'};
Создадим объекты класса R с разными типами данных:
R<int> object(R);
R<char> object1(R1);
std::cout << object.GetElement(1) << std::endl; // Выведет 56
std::cout << object1.GetElement(0) << std::endl; // Выведет M
В первой строке создаётся объект object класса R с типом данных int, передавая в конструктор массив R. Во второй строке создаётся объект object1 с типом данных char, используя массив R1. Затем выводятся на экран элементы массивов с помощью функции GetElement.
Преимущества использования шаблонов классов
Шаблоны классов позволяют избежать написания множества похожих классов для разных типов данных. Вместо создания отдельных классов для int, char, float и других типов, создаётся один шаблон класса, автоматически генерирующий необходимые классы для каждого указанного типа. Это упрощает код и делает его удобнее для поддержки и расширения.
В этом уроке изучены шаблоны классов в C++. Они позволяют создавать гибкие и многоразовые компоненты, работающие с различными типами данных без дублирования кода. Это повышает эффективность разработки и упрощает поддержку проекта.