6.1. Шаблоны Подобно тому, как класс представляет собой схематическое описание объекта, так и шаблон представляет собой схематическое описание построения функций и классов. Шаблоны особенно полезны в библиотеках классов, которыми пользуются программисты. Иногда их называют параметризованными типами, так как они указывают лишь спецификации для функций и классов, но не детали настоящей реализации. 6.1.1 Шаблонные функции Шаблоны функций описывают общие свойства функций и обычно объявляются в заголовочном файле, например: template<classT> void f(T param) { // Тело функции } Шаблон начинается строкой template<class T>, указывающей компилятору, что Т — определяемое пользователем имя типа. Слова class не обязательно и означает класс С++. Необходим, хотя бы один параметр Т в скобках для передачи функции данных для обработки. Можно задать также значение (T param), указатель (T* param) или ссылку (T& param). Шаблон может объявлять несколько параметров этих типов и возвращать значение типа Т, например: template<class T> T f(int a, T b) //тип T будет определяться позже { // Тело функции } Прототип функции будет выглядеть следующим образом: double f(int a, double b); Если бы функция была обычной, то необходима была бы ее реализация. Но поскольку она шаблонная, то компилятор сам реализует код функции, заменив Т в данном случае на double. //Программа 1 #ifndef _MINMAX #define _MINMAX template<class T> T max(T a, T b) { if( a>b ) return a; else return b; } template<class T> T min(T a, T b) { if( a<b ) return a; else return b; } #endif Эти шаблонные функции можно использовать для любых типов данных. #include <iostream.h> #include <conio.h> #include «minmax.h» int max (int a, int b); double max (double a, double b); char max (char a, char b); void main() { clrscr(); int i1 = 100, i2 = 200; double d1 = 3.14, d2 = 9.87; char c1 = ‘A’, c2 = ‘z’; cout << «100, 200 \n»; cout << «max(i1, i2) == » << max(i1, i2) << endl; cout << «3.14, 9.87 \n»; cout << «max(d1, d2) == » << max(d1, d2) << endl; cout << c1 << c2 << «\n»; cout << «max(c1, c2) == » << max(c1, c2) << endl; } В программе объявлены три прототипа. Поскольку программа не содержит их реализаций, то компилятор ищет их шаблон, совпадающий по типу возвращаемого значения и ее параметров. Найдя такой шаблон, он реализуют три перегруженные функции max.
Тема 6: Шаблоны. Списки
27 Фев, 2009
