Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Шаблоны функций
Шаблоны вводятся для того, чтобы автоматизировать создание функций, обрабатывающих разнотипные данные. Например, алгоритм сортировки можно использовать для массивов различных типов. При перегрузке функции для каждого используемого типа определяется своя функция. Шаблон функции определяется один раз, но определение параметризируется, т. е. тип данных передается как параметр шаблона. Формат шаблона: template <class имя_типа [,class имя_типа]> заголовок_функции {тело функции} Таким образом, шаблон семейства функций состоит из 2 частей – заголовка шаблона: template<список параметров шаблона> и обыкновенного определения функции, в котором вместо типа возвращаемого значения и/или типа параметров, записывается имя типа, определенное в заголовке шаблона. Пример 1. //шаблон функции, которая находит абсолютное значение числа любого типа template<class type>//type – имя параметризируемого типа type abs(type x) { if(x<0)return -x; else return x; } Шаблон служит для автоматического формирования конкретных описаний функций по тем вызовам, которые компилятор обнаруживает в программе. Например, если в программе вызов функции осуществляется как abs(-1.5), то компилятор сформирует определение функции double abs(double x){... }.
Пример 2. //шаблон функции, которая меняет местами две переменных template <class T>//T – имя параметризируемого типа void change(T*x,T*y) {T z=*x;*x=*y;*y=z;} Вызов этой функции может быть: long k=10,l=5; change(&k,&l); Компилятор сформирует определение: void change(long*x,long*y){ long z=*x;*x=*y;*y=z;}
Пример 3. #include<iostream.h> template<class Data> Data&rmax(int n,Data a[]) { int im=0; for(int i=0;i<n;i++) if(a[im]<a[im])im=i; return d[im];//возвращает ссылку на максимальный элемент в массиве } void main() {int n=5; int x[]={10,20,30,15}; cout<<”\nrmax(n,x)=”<<rmax(n,x)<<”\n”; rmax(n,x)=0; for(int i=0;i<n;i++) cout<<x[i]<<” “; cout<<”\n”; float y[]={10.4,20.2,30.6,15.5}; cout<<”\nrmax(n,y)=”<<rmax(n,y)<<”\n”; rmax(4,y)=0; for(in i=0;i<n;i++) cout<<y[i]<<” “; cout<<”\n”; } Результаты: rmax(n,x)=30 10 20 0 15 rmax(n,y)=30.6 10.4 20.2 0 15.5 Основные свойства параметров шаблона функций 1. Имена параметров должны быть уникальными во всем определении шаблона. 2. Список параметров шаблона не может быть пустым. 3. В списке параметров шаблона может быть несколько параметров, каждый из них начинается со слова class. Date: 2015-08-15; view: 373; Нарушение авторских прав |