Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 22

25.2.4 Флаги форматирования

В потоках С++ имеются флаги форматирования. Они задают, каким образом форматируется ввод и вывод. Флаги являются битовыми полями, хранящимися в переменной типа long. Одной из функций, используемых для установки флагов, является setf ( ). Она перегружена. Один из ее заголовков имеет вид

longios::setf( long );

Она устанавливает флаги, биты которых установлены в параметре, и возвращает прежнее значение всех флагов.

Функция longios :: unsetf (long) сбрасывает флаги, биты которых установлены в параметре; возвращает прежнее значение всех параметров.

При установке можно указывать несколько флагов, разделяя их вертикальной чертой.

Например,

cout.setf (ios :: showbase | ios :: hex);

cout.seft (ios::fixed );

25.2.5 Некоторые флаги формата

ios::right - данные при выводе выравниваются по правой границе поля.

ios::dec, ios::oct, ios::hex - числа выводятся соответственно в "10", "8" или "16" системах исчисления.

ios::showbase - при выводе чисел добавляется индикатор основания (Ø х для 16-ричных и Ø для 8-ричных).

ios::fixed, ios::scientific - вещественные числа выводятся соответственно с фиксированной или плавающей точкой.

ios::uppercase - буквы от А до F в 16-ричных числах выводятся в верхнем регистре.

25.3 Манипуляторы.

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

Однако применение манипуляторов не ограничивается модификациями формата ввода/вывода.

За исключением setw, изменения, внесенные манипуляторами, сохраняются до следующей установки.

25.3.1 Простые манипуляторы

Манипуляторы, не требующие указания аргументов, называются простыми. Наиболее часто употребляются следующие предопределенные простые манипуляторы:

endl- помещает в выходной поток символ новой строки (\' n') и вызывает

манипулятор flush. Применяется перед вводом символа или символьной строки.

еnds-помещает в выходной поток нулевой символ ('\ Ø'). Обычно используется для указания конца строки.

flush - принудительно записывает все выходные данные на соответствующие физические устройства.

dec,oct,hex - устанавливают соответственно "10", "8", "16" системы счисления.

Примеры:

cout << "hexx =" << hex << x <<' \ n';

Значение х выводится в 16-ричной системе.

cout << "oct x = " << oct << x <<' \ n';

Вывод х в 8-ричной системе.

char name [2Ø];

cout << "Введите имя" <<endl;

cin >> name;

Здесь перед вводом строки символов используется манипулятор endl.

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

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

setbase(int_b) - задает основание преобразования.

setfill(int_f) - задает заполняющий символ.

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

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

setw(int_w) - задает ширину поля.

25.4 Шаблоны С++

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

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