Вы на НеОфициальном сайте факультета ЭиП

На нашем портале ежедневно выкладываются материалы способные помочь студентам. Курсовые, шпаргалки, ответы и еще куча всего что может понадобиться в учебе!
Главная Контакты Карта сайта
 
Где мы?

Реклама


ПАРАМЕТРИЧЕСКИЙ ПОЛИМОРФИЗМ

Просмотров: 2235 Автор: admin

Шаблоны (template) дают возможность создавать функции и классы «в общем виде». Такие классы служат основой для создания компилятором функций и классов, конкретизирующих общее описание. Расширяют и совершенствуют механизм перегруженных функций. Поддерживают идею полиморфизма. Бывают полезными при определении контейнерных классов, где обработка данных имеет одну и ту же форму, независимо от типа.

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

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

Функция обработки данных может быть определена однократно и это объявление параметризовано. Можно отнести к параметрам (параметризировать):

1)    тип возвращаемого значения;

2)    типы параметров функции (при фиксированных числе и порядке).

Определение шаблона функции

Шаблон функции выглядит почти как обычное определение функции. Статус шаблона функции придают ключевое слово template и список параметров шаблона. Заголовок шаблона функции имеет синтаксис:

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

{

// Тело шаблона, обычное описание функции;

}

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

Пример, кочующий из одного руководства в другое, это шаблон функций Swap для обмена двух значений произвольного (любого) типа.

template <class Type>

void Swap (Type & x,Type & y) {

Type  z = x;

x = y;

y = z;

}

Здесь Type – параметр шаблона функций. Используется:

           1.        в заголовке для спецификации формальных параметров;

           2.        в теле шаблона для объявления локальной переменной.

Механизм шаблона функции

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

Например, если в программе объявлены

float a,b;

a=2.3;

b=7.9;

То для обращения вида Swap(a,b); будет генерирован код:

void Swap (float & x, float & y) {

float   z = x;

x = y;

y = z;

}

Далее будет выполнено обращение именно к этой функции. Для переменных другого типа генерируется другой код функции, с другим именем типа.

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

Скачать ПАРАМЕТРИЧЕСКИЙ ПОЛИМОРФИЗМ c_pp.doc [174,5 Kb] (cкачиваний: 28)


Информация

Комментировать статьи на нашем сайте возможно только в течении 60 дней со дня публикации.

Популярные новости

Статистика сайта



Rambler's Top100



 
Copyright © НеОфициальный сайт факультета ЭиП