Шаблоны функций и классов
Шаблоны представляют ещё одну реализацию полиморфизма в программах С++. Они позволяют создать универсальный фрагмент кода, а затем использовать его многократно с различными типами данных или различными объектами. С помощью шаблонов можно уменьшить объём и сложность программы.
Шаблоны функций позволяют передавать в качестве аргумента тип переменной. Шаблоны создают семейства функций, определяющее неограниченное множество родственных функций. Экземпляризация— операция создания определённого типа из шаблона. Отдельные классы называются экземплярами шаблона. Параметризованные шаблоны — представляют возможность создания общего класса и для построения конкретных экземпляров передают этому классу в качестве параметров типы данных.
На пример список. Список может быть для чего угодно.
Построение шаблонов рассмотрим на примере. Необходимо написать функцию расчёта куба для аргумента. (Cub()).
#include<iostream.h>
#include<math.h>
template <class T>
T cub(T x)
{ return x*x*x;}
template <class SwapType>
void Swap(SwapType &x,SwapType &y)
{ SwapType tmp;
tmp=x;
x=y;
y=tmp;
}
template <class T1,class T2>
T1 max(T1 x,T2 y)
{
if(x>y)return x;
Else return y;
}
Void main(void)
{
int i=3;
float f=3.12;
double x=3.1e2;
cout<<"//целое "<<cub(i)<<endl;
cout<<"//вещественное "<<cub(f)<<endl;
cout<<"//двойной точности "<<cub(x)<<endl;
char ch1='a',ch2='z';
cout<<"//1-- "<<ch1<<" 2-- "<<ch2<<endl;
Swap(ch1,ch2); cout<<"//переставили "<<endl;
cout<<"//1-- "<<ch1<<" 2-- "<<ch2<<endl;
int c1=0,c2=9;
cout<<"//1-- "<<c1<<" 2-- "<<c2<<endl;
Swap(c1,c2); cout<<"//переставили "<<endl;
cout<<"//1-- "<<c1<<" 2-- "<<c2<<endl;
cout<<"//max из int "<<c1<<" и int "<<c2<<" = "<<max(c1,c2)<<endl;
cout<<"//max из char "<<ch1<<" и char "<<ch2<<" = "<<max(ch1,ch2)<<endl;
cout<<"//max из int "<<i<<" и float "<<f<<" = "<<max(f,i)<<endl;
}
//целое 27
//вещественное 30.3713
//двойной точности 2.9791e+07
//1-- a 2-- z
//переставили
//1-- z 2-- a
//1-- 0 2-- 9
//переставили
//1-- 9 2-- 0
//max из int 9 и int 0 = 9
//max из char z и char a = z
//max из int 3 и float 3.12 = 3.12
Шаблоны классов.
Шаблон класса представляет собой скелет обобщённого класса. Ситаксис такой:
Template< список_аргументов_шаблона>
{
//тело класса
};
Каждый аргумент в списке является либо объявлением типа float a; либо идентификатором класса class T. Из-за этого определение функции-метода шаблонного класса имеет вид:
Template< список_аргументов_шаблона>
Тип_результата имя_класса < список_аргументов_шаблона>::
Дата добавления: 2015-12-26; просмотров: 693;