Язык С++ и программирование на нем. Рейзлин В.И. - 72 стр.

UptoLike

Составители: 

74
16.10. Шаблоны функций
Цель введения шаблонов функций автоматизация создания
функций, которые могут обрабатывать разнотипные данные.
В определении шаблонов семейства функций используется слу-
жебное слово template, за которым в угловых скобках следует список
параметров шаблона. Каждый формальный параметр шаблона обозна-
чается служебным словом class, за которым следует имя параметра.
Пример: определение шаблона функций, вычисляющих модули
величин различных типов.
template <class type>
type abs(type x){return x >0 ? x: -x;}
Шаблон функций состоит из двух частей заголовка шаблона и из
обычного определения функции, в котором тип возвращаемого значения
и типы любых параметров и локальных переменных могут обозначаться
именами параметров шаблона, введённых в его заголовке.
Пример (снова функция swap):
template <class T>
void swap(T& x, T& y){T z = x; x = y; y = z;}
Шаблон семейства функций служит для автоматического форми-
рования конкретных определений функций по тем вызовам, которые
транслятор обнаруживает в тексте программы. Например, при обраще-
нии
abs(-10, 3)
компилятор сформирует такое определение функции:
double abs(double x){return x > 0? x: -x;}
Далее будет организовано выполнение именно этой функции и в
точку вызова в качестве результата вернется значение 10.3.
Пример: шаблон функций для поиска в массиве максимального
элемента.
#include <iostream.h>
// Функция устанавливает ссылку
// на элемент с максимальным значением
template <class type>
type & r_max ( int n, type d[ ] ){
int im=0;
for (int i = 1; i < n; i++) im = d[im] > d[i] ? im : i;