C++ Шаблоны классов: Урок 25 (с нуля)

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

Создание шаблона класса

Рассмотрим структуру, аналогичную той, что использовалась в прошлом уроке. Используются угловые скобки < > для указания типа данных, передаваемого в класс. Вместо 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++. Они позволяют создавать гибкие и многоразовые компоненты, работающие с различными типами данных без дублирования кода. Это повышает эффективность разработки и упрощает поддержку проекта.

Что будем искать? Например,программа