Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. V Производные обратных тригонометрических функций
  2. Алгоритм работы библиотечных функций malloc/free языка С
  3. Аналитическое выравнивание рядов динамики. Типы развития и соответствующие им уравнения функций.
  4. В. Расстройства интеграции психических функций
  5. Вегетативные рефлексы и центры регуляции вегетативных функций
  6. Возрастание и убывание функций.
  7. Возрастание и убывание функций.

ПЕРЕГРУЗКА ФУНКЦИЙ

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

Перегрузка является видом полиморфизма и применяется в тех случаях, когда одно и то же по смыслу действие реализуется по-разному для различных типов или структур данных. Компилятор сам определяет, какой именно вариант функции вызвать, руководствуясь списком аргументов.

Правила описания перегруженных функций:

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

- Перегруженные функции могут иметь параметры по умолчанию, при этом значения одного и того же параметра в разных функциях должны совпадать.

- Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или использованием ссылки.

 

Пример: Напишем функцию для выбора максимального элемента массива. Функция должна работать для массивов типа int, long, float, double.

Ниже для иллюстрации независимости перегруженных функций от типа возвращаемого значения две функции, обрабатывающие целые массивы (int, long), возвращают значение одного типа long, а обрабатывающие вещественные массивы (double, float), обе возвращают значение типа double. Распознавание перегруженных функций при вызове выполняется по их сигнатурам (описаниям).

ШАБЛОНЫ ФУНКЦИЙ

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

Алгоритм функции-шаблона НЕ ЗАВИСИТ ОТ ТИПА данных.

Области применения перегрузки функций и шаблонов отличаются:

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

а шаблоны – для идентичных действий над данными различных типов.

Шаблон функции определяется c использованием служебного слова template далее идет список формальных параметров шаблона, который заключается в <>. К аждый формальный параметр шаблона обозначается служебным словом class, за которым следует имя параметра (идентификатор):

template <class Type> тип имя ([список_параметров])

{/* тело функции */}

 

Type – параметризированный тип, который может использоваться как в остальной части заголовка, так и в теле функции и который компилятор автоматически заменит именем реального типа данных. Шаблон может содержать несколько параметризированных типов <class Type1, class Type2…>

 

1. Пример шаблона функции, вычисляющей абсолютное значение числа (модуль):

template <class Tip> Tip abs (Tip x )

{

If (x>0) {x=x};

Else x=-x;

}

2. Пример шаблона семейства функций для обмена значений двух передаваемых им параметров.

template <class Type> void swap (Type* x, Type* y )

{

Type z =*x;

*x=*y;

*y=*z;

}

3. ПРИМЕРы использования шаблона для поиска максимального элемента в массивах разных типов.

Решение 1

Решение 2


Дата добавления: 2015-11-26; просмотров: 80 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.008 сек.)