русс | укр

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

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


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


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


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


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

int abs(int n)

{return (n<0)?-n:n; }

Визначена нами функція бере аргумент типу int і повертає результат цього ж типу. Але тепер уявімо, що потрібно знайти модуль числа типу long. Доведеться писати ще одну функцію.

long abs(long n)

{return (n<0)?-n:n; }

І ще одну для типу float

float abs(float n)

{return (n<0)?-n:n; }

 

Як бачимо, тіло функції нічим не відрізняється. І все ж ці функції різні, оскільки обробляють аргументи і повертають значення різних типів. Вони можуть бути перезавантажені і мати однакові імена, але кожну з них треба визначати окремо. Багатократне переписування функцій-близнюків є трудомістким і знижує читабельність тексту та ускладнює внесення змін і поправок. Чи існує спосіб написати функцію один раз і змусити її працювати з різними типами даних? Так, існує, і цим способом є використання шаблонів.

 

Шаблон простої функції

Покажемо, як пишеться шаблон функції, що обчислює модуль числа. Шаблон працює з усіма базовими числовими типами. В програмі спершу визначається шаблонна версія abs(), а потім в main() проходить перевірка правильності її роботи.

//шаблон простої функції

#include<iostream>

#include<conio.h>

using namespace std;

template <class T>

T abs(T n)

{return(n>0)?n:-n;

}

int main()

{int int1=5;

int int2=-6;

long lon1=7000L;

long lon2=-8000L;

double dub1=9.95;

double dub2=-10.15;

cout<<"\nabs("<<int1<<")="<<abs(int1);

cout<<"\nabs("<<int2<<")="<<abs(int2);

cout<<"\nabs("<<lon1<<")="<<abs(lon1);

cout<<"\nabs("<<lon2<<")="<<abs(lon2);

cout<<"\nabs("<<dub1<<")="<<abs(dub1);

cout<<"\nabs("<<dub2<<")="<<abs(dub2);

cout<<endl;

getch();

return 0;

}

Програма 14.1

 

Тепер функція abs()може працювати зі всіма трьома типами даних: int, long, double. Вона працюватиме також з іншими числовими типами і з типами користувача, в яких перезавантажені оператор «менше» і унарний мінус.

Специфікація функції abs() для роботи з кількома типами даних.

template <class T>

T abs(T n)

{return(n>0)?n:-n;

}

Вся ця конструкція, починаючи від слова template, називається шаблоном функції.

 


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


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