Пример шаблонов C ++ | Класс шаблона в C ++

Шаблоны C ++ — это простой, но мощный инструмент, поскольку идея состоит в том, чтобы передавать тип данных в качестве параметра, чтобы нам не приходилось писать один и тот же код для разных типов данных. Шаблоны — это способ сделать ваши классы более абстрактными, позволяя вам определять поведение класса, фактически не зная, какие операции класса будут обрабатывать тип данных.

Пример шаблонов C ++

Шаблоны — это доминирующая функция C ++, которая позволяет писать общие программы. Проще говоря, вы можете создать одну функцию или класс для работы с разными типами данных с помощью шаблонов.

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

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

Зачем использовать?

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

Два ключевых слова, а именно template и typename или class, используются для написания шаблонов на C ++.

Как работают шаблоны C ++?

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

Пример функции шаблона в C ++

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

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

Мы можем определить общий тип данных, скажем «T», и использовать ключевое слово class или typename непосредственно перед написанием основной функции. Итак, typename написано прямо над записываемой функцией..

Теперь «T» можно использовать вместо типов данных, которые нужно определить. Итак, если вы хотите, чтобы int a был общим, напишите T a, и все готово. См. Следующий пример файла sampletemplate.cpp .

 #include  using namespace std;  шаблон  T sum (T a [], int sz) {int i;  T ans = 0;  для (i = 0; i  (a, 4)  (b, 5)  

См. следующий результат.

Шаблонные функции для sort (), max (), min () также могут быть реализованы аналогичным образом.

Пример класса шаблона

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

Шаблон с использованием одного типа данных:

Ниже приведен образец класса шаблона стека с его основными функциями push () и pop (). Его можно использовать для любого типа данных. Здесь прямо перед определением класса написаны typename , чтобы сделать его классом шаблона.

Теперь «T» можно использовать внутри класса в качестве универсального типа данных. Как и в классе стека, мы можем использовать «T» для определения универсального массива. Это похоже на предположение, что вы пишете простой класс стека для целочисленных значений, а затем заменяете типы данных переменных, связанных с элементами стека, на «T.»

 #include  using namespace std;  шаблон  class stack_ {T * arr;  int sz; //размер int num_of_elements;  общедоступные: stack_ (int s) {arr = new T [s];  sz = s;  num_of_elements = 0; //нулевые элементы в начале} void push (T x) {if (num_of_elements == sz) {cout  s (5);  s.push (1);  s.push (2);  s.push (3);  s.push (4);  s.push (5);  int v = s.pop ();  cout  

См. следующий результат.

Шаблон с использованием двух разных типов данных

Кроме того, мы можем иметь более одного типа данных в функциях шаблона или класс.

Предположим, нам нужно создать функцию, которая имеет дело с двумя разными типами данных.. Чтобы сделать эти два разных типа данных, можно использовать универсальную функцию шаблона.

Итак, вместо template мы будем использовать template , чтобы сообщить компилятору, что мы собираемся использовать два общих типа данных, которые могут отличаться друг от друга.

Как только эта строка будет написана, мы можем начать писать функцию, используя тип данных «T» и тип данных «U» там, где это необходимо.

 #include  using namespace std;  template  void sum (T a [], int n, U b [], int m) {//можно передать два разных типа массива T sum_type1 = 0;  int i;  для (я = 0; я  (a, 3, b, 3);  возврат 0;  } 

См. следующий пример.

Шаблон с использованием типа данных по умолчанию

Поскольку мы используем не только типы данных, мы можем установить некоторые из них как по умолчанию, но они должны присутствовать наконец.

Итак, если мы создадим экземпляр этого класса шаблона, мы сможем создать экземпляр с меньшим количеством типов данных, если тип данных по умолчанию был во время определения класса шаблона. В шаблоне ‘U’ установлено значение по умолчанию int.

Итак, если мы создадим экземпляр только с одним типом данных, проблем не возникнет, и в этом случае будет вызываться конструктор также потому, что мы установили другой общий тип данных, который является 'U', на default, и он автоматически будет считать, что он имеет тип int.

См. следующий код.

 #include  using namespace std;  template  образец класса {T x;  U y;  public: sample () {cout  ();  образец  ();  возврат 0;  } 

См. следующий результат.

Наконец, пример шаблонов C ++ завершен.

Оцените статью
nanomode.ru
Добавить комментарий