Параметризованные манипуляторы

 

Требуют спецификации аргументов. Некоторые из них приведены ниже.

setbase (int _ b) – задает основание преобразования.

setfill (int _ f) – задает заполняющий символ.

setprecision (int _ n) – задает значение внутренней переменной n точности

вещественных чисел.

setw (int _ w) – задает ширину поля.

 

25.4 Шаблоны С + +

 

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

 

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

 

При написании программы на С + + может возникнуть необходимость создать несколько функций, которые выполняют одни и те же действия, но с данными разных типов. Например, нужно создать функции, определяющие максимальные элементы для массивов int и double. Или выполнять сортировку элементов массивов разных типов и т.д. В этих случаях удобно написать шаблон функции, по которому компилятор самостоятельно создает функцию для каждого из типов данных. При определении шаблона функции будут использоваться формальные типы данных, а при обращении к шаблону будут указываться соответствующие фактические типы данных.

Синтаксис шаблона функции имеет вид:

template<список_формальных_типов_шаблона>

Тип_ результата имя_функции (параметры)

{

Тело функции

}

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

Рассмотрим примеры использования шаблонов при создании функции нахождения суммы элементов одномерных массивов, а также их сортировки для разных типов данных.

Пример 1

# include < iostream. h>

template < class T >

T sum (T x [ ], int n)

{

T s = Ø; // s – переменная типа class T

for (int i = Ø; i < n; i ++)

s+ = x [ i ];

return s;

}

/ * Определен шаблон функции для вычисления суммы элементов одномерного массива типа class T * /

void main ( )

{

int m [ ] = {1,2,3,4,5,6,7,8,9,10};

int sum_int = sum (m,10);

/*Компилятор создает по шаблону функцию sum для целого типа int */

cout << ” sum_int = “ <<sum_int << ‘ \ n ’;

float x [ ] = { -1, Ø, 2.5, -Ø.1, Ø.15};

float sum_float = s ( x, 5 );

/*Компилятор создает по шаблону функцию sum для типа float */

cout <<”sum_float =” << sum_float << ‘ \ n ’ ;

}

Пример 2

Сортировка элементов одномерного массива методом «пузырька».

# include < iostream. h >

template < class T >

void sort ( T x [ ], int n)

{

T v; // v – переменная типа class T

for (int k = n-1; k>Ø; i + +)

for(int i=0;i<k;i++

)

if (x [i + 1] < x [ i ])

{

v = x [ i + 1];

x [ i+1] = x [ i ];

x [ i ] = v;

}

}

/* Определен шаблон функции сортировки элементов одномерного массива */

void main ( )

{

int m [1Ø] = {1Ø, 1, 9, 2, 8, 3, 7, 4, 6, 5};

sort (m, 1Ø);

/* Компилятор создает по шаблону функцию sort для целого типа int. После сортировки массив m имеет вид:

for (int i = Ø; i < 1Ø; i + +)

cout << “ m [“ << i << “] = “ << m [ i ] << ‘ \ n ‘;

float x [ 5 ] = {5, -1, 4, -2, 3};

sort ( x, 5 );

/* Компилятор создает по шаблону функцию sort для типа float. После сортировки массив ч имеет вид: */

for ( i = Ø; i < 5; i + +)

count << “ x [“ << i << “] = “ << x [ i ] << ‘ \ n ‘;

}

Заключение

 

На этом заканчивается относительно краткое изложение алгоритмического языка С + +. Как уже было сказано во введении , отобранный материал позволяет получить основные сведения об этом языке и самостоятельно программировать на нем. Дополнительные сведения, которые можно получить из приведенных литературных источников или из Internet, позволят повысить эффективность ваших программ за счет использования тех возможностей языка С + +, которые не освещены в лекциях.