русс | укр

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

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

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

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


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

Функция-шаблон. Назначение функции-шаблона? Общий вид функции-шаблона?


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


Функция-шаблон определяет общий набор операций, который будет применен к данным различных типов.

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

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

Функции-шаблоны создаются с использованием ключевого слова template (шаблон).

Общая форма функции-шаблона имеет следующий вид:

template <class параметр-тип> возвращаемый_тип имя_функции (список параметров)

{

. . . //тело функции

}

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

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

# include <iostream.h>

// Х – шаблон типа, используемый в качестве параметра-типа. Далее объявляется функция

//swap(), использующая тип данных Х для параметров, которые будут обмениваться значениями

template <class Х> void swap (X &a, Х &b)

{

X temp;

temp=a;

a=b;

b=temp;

}

int main()

{

int i=10, j=20;

float x=10.1, y=23.3;

char a='x', b='z';

 

cout<<"Первоначальные значения i, j: "<<i<<" "<<j<<endl;



cout<<" Первоначальные значения x, y: "<<x<<" "<<y<<endl;

cout<<" Первоначальные значения a, b: "<<a<<" "<<b<<endl;

swap(i, j);

swap(x, y);

swap(a, b);

cout<<"Измененные значения i, j: "<<i<<" "<<j<<endl;

cout<<" Измененные значения x, y: "<<x<<" "<<y<<endl;

cout<<" Измененные значения a, b: "<<a<<" "<<b<<endl;

return 0;

}

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

Можно определить несколько типов-шаблонов данных в инструкции template, перечислив их через запятую.

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

#include<iostream.h>

#include<conio.h>

template <class Type1, class Type2> Type1 max(Type1 x, Type2 y)

{

return (x>y)?x:y;

}

// по шаблону типы аргументов должны быть одинаковыми,

// поэтому, для вариантов max(int, char) и max(char, int)

// нужно явно описать необходимые преобразования типов

char max(char, char);

void main(void)

{

int a=1, b=2;

char c='9', d='A';

 

clrscr();

cout<<max(a,b)<<" "<<max(c,d)<<" "<<max(a,c)<<" "<<max(c,b);

}

 



<== предыдущая лекция | следующая лекция ==>
В чем заключается процесс уточнения? | Класс-шаблон. Общая форма класса-шаблона и экземпляра такого класса?


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


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

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

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


 


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

 
 

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

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