Опубликован: 07.03.2015 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания ALT Linux
Лекция 4:

Использование функций при программировании на C++

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

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

Простейшую функцию–шаблон в общем виде можно записать так [6]:

template <class Type> заголовок
{
	тело функции
}
				

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

Рассмотрим пример шаблона поиска наименьшего из четырёх чисел.

#include <iostream>
using namespace std;
//Определяем абстрактный тип данных с помощью служебного слова Type .
template <class Type>
Type minimum( Type a, Type b, Type c, Type d )
{ //Определяем функцию с использованием типа данных Type .
	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 thelih chisla \t";
	cin >>ia >>ib>>ic >>id;
	mini=minimum( ia, ib, ic, id ); //Вызов функции minimum, в которую передаём
	//4 целых значения.
	cout<<"\n"<<mini<<"\n";
	cout<<" Vvod 4 vecshestvenih chisla \t"; cin >>ra>>rb>>rc>>rd;
	minr=minimum( ra, rb, rc, rd ); //Вызов функции minimum, в которую передаём
	//4 вещественных значения.
	cout<<"\n"<<minr<<"\n";
	return 0;
}
				

4.8 Область видимости переменных в функциях

Как известно (п. 2.8), по месту объявления переменные в языке C++ делятся на три класса: локальные, глобальные и переменные, описанные в списке формальных параметров функций. Все эти переменные имеют разную область видимости.

Локальные переменные объявляются внутри функции и доступны только в ней. О таких переменных говорят, что они имеют локальную видимость, то есть, видимы только внутри функции.

Глобальные переменные описывают вне всех функций. Поскольку они доступны из любой точки программы, то их область видимости охватывает весь файл.

Одно и тоже имя может использоваться при определении глобальной и локальной переменной. В этом случае в теле функции локальная переменная имеет преимущество и "закрывает" собой глобальную. Вне этой функции "работает" глобальное описание переменной.

Из функции, где действует локальное описание переменной, можно обратиться к глобальной переменной с таким же именем, используя оператор расширения области видимости

::переменная;
				

Рассмотрим пример:

#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";
	return 0;
}
				

Результаты работы программы:

	g=7
	local pr=1 //Локальная переменная.
	global pr=100.678 //Глобальная переменная.
	g - prostoe
				
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?