русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-01-08; просмотров: 598; Нарушение авторских прав


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

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

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

template <class Имя_типа1, class Имя_типа2>

заголовок_функции

Здесь Имя_типа означает фиктивный тип, который будет использован внутри функции на правах обычного типа данных и который будет явно задан параметром шаблона при его использовании. Вместо ключевого слова class допускается применять typename, семантически они равнозначны.

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

#include <iostream>

using namespace std;

 



template <class T>

void tswap(T& p1, T& p2)

{

T temp = p1;

p1 = p2;

p2 = temp;

}

 



void main()

{

int i = 0, ii = 10;

double f = -8.2, ff = 8.2;

unsigned char c = 'a', cc = 'z';

 



cout << "i = " << i << ", ii = " << ii << endl;

cout << "f = " << f << ", ff = " << ff << endl;

cout << "c = " << c << ", cc = " << cc << endl;

 



tswap(i, ii); // tswap(int&, int&)

tswap(f, ff); // tswap(double &, double &)

tswap(c, cc); // tswap(unsigned char&, unsigned char&)

 



cout << "i = " << i << ", ii = " << ii << endl;

cout << "f = " << f << ", ff = " << ff << endl;

cout << "c = " << c << ", cc = " << cc << endl;

system("pause");

}

В примере шаблона идентификатор T представляет собой обобщенный тип, который конкретизируется при вызове функции. Так как функция в программе вызывается с тремя различными типами данных – int, double и unsigned char – компилятор автоматически сгенерирует три реализации функции tswap.

При определении шаблонов следует помнить следующие правила:

- типы-параметры шаблона должны быть уникальными во всём определении шаблона;

- список параметров функции-шаблона не может быть пустым;

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

Пример шаблонов, выполняющих простейшие действия с массивами любых встроенных типов:

#include <iostream>

using namespace std;

 



/* прибавляет к элементам массива arr1 значения

соответствующих элементов массива arr2 */

template <class TArr1, class TArr2>

void add_array(TArr1 arr1[], TArr2 arr2[], short size)

{

for (int i = 0; i < size; i++)

arr1[i] += arr2[i];

}

 



// выводит на экран массив

template <class Elem>

void print_array(Elem arr[], short size)

{

for (int i = 0; i < size; i++)

cout << arr[i] << ' ';

}

 



void main()

{

const int n = 10;

int iarr[n] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

double farr[n] = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9};

 



add_array(farr, iarr, n);

print_array(farr, n);

cout << endl;

 



system("pause");

}

Функция add_array принимает 3 параметра – 2 массива и их размер. Типы элементов массива заданы в виде параметров шаблона (TArr1 и TArr2), поэтому они могут быть разными (в программе использованы типы int и double). Функция к каждому элементу первого массива прибавляет значение соответствующего элемента второго массива.

Вторая функция print_array позволяет выводить на экран массивы любых стандартных типов. Этот шаблон имеет один параметр – Elem.



<== предыдущая лекция | следующая лекция ==>
Перегрузка функций | Директива #include


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.12 сек.