Объектно-ориентированное программирование. Сивохин А.В - 52 стр.

UptoLike

52
Шаблоны
Классическим примером использования шаблонов является функция min.
Рассмотрим сначала реализацию этой функции без шаблонов.
int min (int a, int b)
{ return ((a<=b)? a: b);
}
Если потребуется найти минимум для двух переменных типа double или двух
переменных типа float, придется написать дополнительные функции, которые будут
отличаться от min только типами аргументов и возвращаемых значений. Такой
подход нерационален
. Гораздо удобнее было написать некий общий образец min,
не привязанный к конкретным типам данных, на основании которого компилятор
сам сгенерирует тело конкретной функции. В языке Си++ имеется возможность
создания таких образцов функций, или шаблонов.
Пример:
template <class T>
T min (T a, T b)
{return ((a<=b)? a: b);
}
void main ()
{unsigned char i,j,k;
float a,b,c;
double x,y,z;
. . .
//Компилятор сам сгенерирует тела функций min по шаблону!
k=min (i,j); c=min (a,b); z=min (x,y);
. . .
}
В приведенном примере
в качестве параметра настройки шаблона выступает
идентификатор T, который представляет тип, о чем свидетельствует ключевое
слово class. Такая запись говорит о том, что для произвольного класса T
необходимо получить функцию с данным поведением.
В языке Си++ имеется возможность задавать и шаблоны классов (родовые
классы, параметризованные типы). Они представляют собой общую структуру, на
                                                                             52


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

     int min (int a, int b)
        { return ((a<=b)? a: b);
         }
     Если потребуется найти минимум для двух переменных типа double или двух
переменных типа float, придется написать дополнительные функции, которые будут
отличаться от min только типами аргументов и возвращаемых значений. Такой
подход нерационален. Гораздо удобнее было написать некий общий образец min,
не привязанный к конкретным типам данных, на основании которого компилятор
сам сгенерирует тело конкретной функции. В языке Си++ имеется возможность
создания таких образцов функций, или шаблонов.
     Пример:
template 
T min (T a, T b)
{return ((a<=b)? a: b);
 }

void main ()
{unsigned char i,j,k;
 float a,b,c;
 double x,y,z;
   . . .
//Компилятор сам сгенерирует тела функций min по шаблону!
 k=min (i,j); c=min (a,b); z=min (x,y);
   . . .
}

    В приведенном примере в качестве параметра настройки шаблона выступает
идентификатор T, который представляет тип, о чем свидетельствует ключевое
слово class. Такая запись говорит о том, что для произвольного класса T
необходимо получить функцию с данным поведением.
    В языке Си++ имеется возможность задавать и шаблоны классов (родовые
классы, параметризованные типы). Они представляют собой общую структуру, на