ЛАБОРАТОРНАЯ РАБОТА N 8

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

 

1.Перегрузка и шаблоны функций

 

В одной программе может быть размещено несколько функций с одним и тем же именем, если списки формальных параметров у них различны. Требование уникальности, таким образом, предъявляется к расширенному имени функции, состоящему из собственно имени функции и списка формальных параметров.

Для описания семейства функций, реализующих аналогичные алгоритмы, можно воспользоваться шаблоном функции в соответствии со следующим синтаксисом:

template <<список формальных параметров шаблона>><возвращаемое значение><имя функции>(<список формальных параметров функции>)

{<тело функции>}

Список формальных параметров шаблона содержит формальные параметры типа, разделенные запятыми. Формальный параметр может состоять из ключевого слова class и идентификатора типа.

Пример описания шаблона

template <class T> min(T t1,T t2)

{if(t1,t2) return t1; else return t2;}

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

Чтобы уточнить шаблон для особых типов параметров функции, можно определить специализированные шаблонные функции. Так, в дополнение к вышеприведенному примеру:

//специализированная версия min():

char *min(char*t1,char*t2)

{if(strcmp(t1,t2)<0) return t1; else return t2;}

В функции main при первом вызове min используется ее специализированная версия, а при втором – версия, сгенерированная по шаблону для данных типа float:

void main()

{ char *p=min(“abc”,”123”);

float a=min(1.2,3.4);

}

2.Задание на лабораторную работу

 

Написать функцию-шаблон для одной из операций над одномерным массивом элементов простых типов, предусмотрев специализированную реализацию этой же операции для массива структур. Операцию над массивом выбрать в соответствии с вариантом задания.

  1. Определение количества элементов, равных первому
  2. Обмен значениями двух элементов, заданных номерами
  3. Определение номера элемента, заданного значением
  4. Обращение массива
  5. Вставка заданного элемента в заданную позицию массива
  6. Удаление элемента, заданного номером
  7. Определение размера самого длинного участка подряд следующих элементов с одинаковыми значениями
  8. Определение размера самого короткого участка подряд следующих элементов с одинаковыми значениями
  9. Замена всех элементов, имеющих заданное значение, элементами с другим заданным значением
  10. Определение количества участков подряд следующих элементов с одинаковыми значениями