Шаблон — особый вид функции. С помощью шаблона функции можно определить алгоритм, который будет применяться к данным различных типов. Механизм работы шаблона заключается в том, что на этапе компиляции конкретный тип данных передается в функцию в виде параметра.
Простейшую функцию-шаблон в общем виде можно записать так:
template <class Type> заголовок
{
тело функции
}
Обычно в угловых скобках указывают используемых в функции типов данных. Каждый тип начинается со служебного слова class. В общем случае в списке могут быть не только типы данных, но и имена переменных.
Рассмотрим пример шаблона поиска наименьшего из четырех чисел.
#include "stdafx.h" #include <iostream> using namespace std; //опредилим абстрактный тип данных //с помощью служебного слова Type template <class Type> //определяем функцию с использованием //типа данных Type Type minimum(Type a, Type b, Type c, Type d) { Type min=a; if (b<min) min=b; if (c<min) min=c; if (d<min) min=d; return min; } int main () { int ia, ib, ic, id, mini; float ra, rb, rc, rd, minr; cout<<"vvod 4 theluh chisla \t"; cin>>ia>>ib>>ic>>id; //вызов функции minimum, в которую //передаем 4 целых значения mini=minimum(ia, ib, ic, id); cout<<"\n minimalnoe chislo= "<<mini<<"\n"; cout<<"vvod 4 vechestvennuh chisla \t"; cin>>ra>>rb>>rc>>rd; //вызов функции minimum, в которую //передаем 4 вещественных числа minr=minimum(ra, rb, rc, rd); cout<<"\n minimalnoe chislo= "<<minr<<"\n"; system("pause"); return 0; }
Так выглядит результат работы программы:
Аналогичные программы лучше и удобнее составлять с использованием массивов. О них мы будем говорить в следующих уроках. А пока, давайте более детально разберем локальные и глобальные переменные, о которых уже было сказано в первом уроке про функции.
Как известно, по месту объявления переменные в языке C++ делятся на три класса: локальные, глобальные и переменные, описанные в списке формальных параметров функции. Все эти переменные имеют разную область видимости.
Локальные переменные объявляются внутри функции и доступны только в ней. О таких переменных говорят, что они имеют локальную видимость, то есть могут быть использованы только в той функции, в которой описаны.
Глобальные переменные описывают вне всех функций. Они доступны из любой точки программы, то есть их область видимости охватывает весь код.
Одно и тоже имя может использоваться при определении глобальной и локальной переменной. В этом случае в теле функции локальная переменная имеет преимущество и «закрывает» собой глобальную. Вне этой функции «работает» глобальное описание переменной.
Из функции, где действует локальное описание переменной, можно обратиться к глобальной переменной с таким же именем, используя оператор расширения области видимости.
Рассмотрим пример:
#include "stdafx.h" #include <iostream> using namespace std; float pr=100.678; //переменная pr определенна глобально int prostoe (int n) { int pr=1,i; //переменная pr определенна локально if (n<0) pr=0; else for (i=2; i<=n/2; i++) if (n%i==0) {pr=0; break;} cout<<"local pr="<<pr<<"\n"; //вывод локальной переменной cout<<"global pr="<<::pr<<"\n"; //вывод глобальной переменной return pr; } int main () { int g; cout<<"g="; cin>>g; if (prostoe(g)) cout<<"g - prostoe \n"; else cout<<"g - ne prostoe \n"; system("pause"); return 0; }
Результат работы программы:
Это был последний урок из категории «Функции C++». В следующих уроках вы узнаете что такое массивы и как их использовать в алгоритме программы.