русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

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


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шаблони функцій з кількома аргументами


Дата додавання: 2014-04-22; переглядів: 930.


Розглянемо інший приклад шаблону функції. В ньому три аргументи, два з яких шаблонні, а один – базового типу. Функція призначена для пошуку в масиві заданого числа. Вона повертає індекс знайденого значення або -1 у випадку відсутності в масиві. Аргументами є вказівник на масив; значення, яке треба знайти, а також розмір масиву. В main() ми визначаємо 4 різних масиви різних типів і 4 значення, які потрібно знайти. Тип char в даному прикладі сприймається як число. Для кожного масиву викликається шаблонна функція.

#include<iostream>

#include<conio.h>

using namespace std;

template <class atype>

int find(atype* array,atype value,int size)

{for(int j=0;j<size;j++)

if(array[j]==value)

return j;

return -1;

}

//

char chrArr[]={1,3,5,9,11,13};

char ch=5;

int intArr[]={1,3,5,9,11,13};

int in=6;

long lonArr[]={1L,3L,5L,9L,11L,13L};

long lo=11L;

double dubArr[]={1.0,3.0,5.0,9.0,11.0,13.0};

double db=4.0;

int main()

{

cout<<"\n 5 v chrArray index="<<find(chrArr,ch,6);

cout<<"\n 6 v intArray index="<<find(intArr,in,6);

cout<<"\n 11 v lonArray index="<<find(lonArr,lo,6);

cout<<"\n 4 v dubArray index="<<find(dubArr,db,6);

cout<<endl;

getch();

return 0;

}

Програма 14.2

 

 

Шаблонний аргумент ми називаємо іменем atype. Воно з’являэться в аргументах двычы: як тип вказывника на масив ы як тип шуканого значення.

При виклику шаблонної функції всі екземпляри даного аргументу шаблону повинні бути однакового типу. Не можна в масиві цілого типу шукати дійсне значення:

int intarray[]={1,3,5,7};

float f1=5.0;

int value=find(intarray,f1,4);

Компілятору потрібно, щоб всі екземпляри atype були одного типу. Він може згенерувати коду функції

find(int*,int,int);

але не

find(int*,float,int);

 

 

Різні аргументи одного шаблону

В шаблоні функції можна використати кілька шаблонних аргументів. У попередньому прикладі можна зробити розмір масиву ще одним елементом шаблону. Назвемо його btype.

template <class atype>

btype find(atype* array,atype value,btype size)

{for(btype j=0;j<size;j++)

if(array[j]==value)

return j;

return static_cast<-1>(-1);

}

 

Тепер можна використовувати значення як типу int, так і long і навіть типу користувача в якості розміру масиву. Компілятор при своїй роботі буде орієнтуватися не тільки на різні типи самого масиву і шуканого числа, але й на різні типи значень його розміру.

 

 


<== попередня лекція | наступна лекція ==>
Синтаксис шаблону функції | Шаблони класів


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн