Параметризованные манипуляторы
Требуют спецификации аргументов. Некоторые из них приведены ниже.
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, позволят повысить эффективность ваших программ за счет использования тех возможностей языка С + +, которые не освещены в лекциях.