Скачать презентацию ШАБЛОНЫ Шаблон template — объявление содержащее родовой тип Этот Скачать презентацию ШАБЛОНЫ Шаблон template — объявление содержащее родовой тип Этот

Шаблоны функций.ppt

  • Количество слайдов: 19

ШАБЛОНЫ Шаблон (template)- объявление, содержащее родовой тип. Этот тип, который можно обозначить идентификатором (например, ШАБЛОНЫ Шаблон (template)- объявление, содержащее родовой тип. Этот тип, который можно обозначить идентификатором (например, Т), является заготовкой для типа, определяемого позднее. Будучи объявленным, шаблон может использоваться для генерации специального объявления, замещающего тип Т реальным типом.

Template< class T> Class pair { T a, b; } Template< class T> Class pair { T a, b; }

как только это объявление прочитано компилятором , шаблон pair может использоваться для объявления специальных как только это объявление прочитано компилятором , шаблон pair может использоваться для объявления специальных типов, например: pair jeans; теперь структура pair является классом, содержащим два целых a и b.

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

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

Синтаксис объявления шаблона функции имеет следующий вид: Template <class T 1|T 1 идент1, class Синтаксис объявления шаблона функции имеет следующий вид: Template Возвр_тип имя_функции (список параметров) { //Тело функции }

Каждый параметр является: -Либо ключевым словом class, за которым следует имя типа; -Либо именем Каждый параметр является: -Либо ключевым словом class, за которым следует имя типа; -Либо именем типа, за которым следует идентификатор. Для задания параметризованных типов вместо ключевого слова class может также использоваться ключевое слово typename. Параметры шаблона, следующие за ключевым словом class или typename, называют параметризованными

#include <iostream> using namespace std; template <class T> T Sqr(x) { return x*x; } #include using namespace std; template T Sqr(x) { return x*x; }

template <class T> T* Swap(T* t, int ind 1, int ind 2) { T template T* Swap(T* t, int ind 1, int ind 2) { T tmp=t[ind 1]; // t строчные T[ind 1]= t[ind 2]; T[ind 2]=t[ind 1]; Return t; }

template <typename T 1, typename T 2> void Display( T 1 x, T 2 template void Display( T 1 x, T 2 y) { cout. width(8); cout<

template<class T, int offset> void Get. Addres(T* obj, unsigned int *p. Addr) { *p. template void Get. Addres(T* obj, unsigned int *p. Addr) { *p. Addr=(unsigned int)&obj[0]+offset*sizeof(T); }

int main() { int n=10, sq_n, i=2, j=5; double d=10. 21, sq_d; char* str=” int main() { int n=10, sq_n, i=2, j=5; double d=10. 21, sq_d; char* str=” Шаблон”; sq_n=Sqr(n); sq_d=Sqr (d); int Arr[100]; unsigned int addr=0;

cout<<”значение n=”<<n<<endl<<”его квадрат=” <<sq_n<<endl; cout<<”Значение d=”<<d<<endl <<”Его квадрат=”<<sq_d<<endl; cout<<”Исходная строка=’ “<<str<<” ’ “<<endl; cout<<”Преобразованная cout<<”значение n=”<

Display(n, d); Display(sq_n, sq_d); Get. Addres< int , 5>(Arr, &addr); Cout<<”Адрес элемента Arr[5]=”<<hex<<showbase<<upcase<<a ddr; Display(n, d); Display(sq_n, sq_d); Get. Addres< int , 5>(Arr, &addr); Cout<<”Адрес элемента Arr[5]=”<

Как и для обычных функций, можно создать прототип шаблона функции в виде его предварительного Как и для обычных функций, можно создать прототип шаблона функции в виде его предварительного объявления. Например: Template T* Swap (T* t, int ind 1, int ind 2); Имена параметров шаблонной функции в ее объявлении могут не совпадать.

ПЕРЕГРУЗКА ШАБЛОНОВ ФУНКЦИЙ #include <iostream. h> using namespace std; //возвращает больший из двух параметров ПЕРЕГРУЗКА ШАБЛОНОВ ФУНКЦИЙ #include using namespace std; //возвращает больший из двух параметров template const T& max(const T& a, const T& b) { return a>b? a: b; }

//возвращает наибольший элемент массива template<class T> const T max( T* a, size_t size) { //возвращает наибольший элемент массива template const T max( T* a, size_t size) { T* tmp=a; For(int i=0; i*tmp) *tmp=a[i]; } return *tmp; }

int main() { int m=9, n=12; int arr[]={3, 5, 7, 9}; cout<<”max int=”<<max(m, n)<<endl; int main() { int m=9, n=12; int arr[]={3, 5, 7, 9}; cout<<”max int=”<

при выполнениии программа выводит на экран max int=12 max in arr=9 при выполнениии программа выводит на экран max int=12 max in arr=9