- •А. В. Кибардин
- •Оглавление
- •Введение
- •Классы Описание класса
- •Описание объектов
- •Указательthis
- •Конструкторы
- •Конструктор копирования
- •Конструктор копирования для класса monstr:
- •Статические элементы класса
- •Статические поля
- •Статические методы
- •Дружественные функции и классы Дружественные функции
- •Дружественный класс
- •Деструкторы
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •Наследование Ключи доступа
- •Простое наследование
- •Правила наследования методов
- •Виртуальные методы и механизм позднего связывания
- •Абстрактные классы
- •Обработка исключительных ситуаций
- •Синтаксис исключений
- •Перехват исключений
- •Список исключений
- •Иерархии исключений
- •Стандартная библиотека
- •Потоковые классы
- •Стандартные потоки
- •Форматирование данных
- •Флаги и форматирующие методы
- •Манипуляторы
- •Методы обмена с потоком
- •Ошибки потоков
- •Файловые потоки
- •Строковые потоки
- •Конструкторы и присваивание строк
- •Операции
- •Функции Присваивание и добавление частей строк
- •Преобразование строк
- •Поиск подстрок
- •Сравнение частей строк
- •Получение характеристик строк
- •Контейнерные классы
- •Последовательные контейнеры
- •Векторы
- •Двусторонние очереди
- •Ассоциативные контейнеры
- •Словари
- •Словари с дубликатами (multimap)
- •Приложение 1. Шаблоны функций
- •Приложение 2. Шаблоны классов
- •Библиографический список
- •В трех частях
Форматирование данных
Форматирование в потоковых классах выполняется тремя способами: с помощью флагов, манипуляторов и форматирующих методов.
Флаги и форматирующие методы
Флаги – это отдельные биты, объединенные в поле x_flags типа long класса ios.
Таблица 3
Некоторые флаги форматирования
Флаг |
Умолчание |
Описание |
skipws |
+ |
При извлечении пробельные символы игнорируются |
left |
- |
Выравнивание по левому краю поля |
right |
+ |
Выравнивание по правому краю поля |
internal |
- |
Знак числа выводится по левому краю, число – по правому |
dec |
+ |
Десятичная система счисления |
oct |
- |
Восьмеричная система счисления |
hex |
- |
Шестнадцатеричная система счисления |
showbase |
- |
Выводится основание системы счисления (0x – шестнадцатеричная, 0 – восьмеричная) |
showpoint |
- |
При выводе числа печатается точка и дробная часть числа |
uppercase |
- |
Использование при выводе верхнего регистра |
scientific |
- |
Печать вещественных чисел в экспоненциальной форме |
fixed |
- |
Печать вещественных чисел в форме с фиксированной точкой |
Для управления флагами в классе ios есть методы flags, setf и unsetf.
long ios :: flags (long); – возвращает текущие флаги потока;
long ios :: flags (long); – присваивает флагам значение параметра;
long ios :: setf (long, long); – присваивает флагам, биты которых установлены в первом параметре, значение соответствующих битов второго параметра;
long ios :: setf (long, long); – устанавливает флаги, биты которых установлены в параметре;
long ios :: unsetf (long, long); – сбрасывает флаги, биты которых установлены в параметре;
Все функции возвращают прежние флаги потока.
Кроме флагов для форматирования используются поля класса ios:
int x_width – минимальная ширина поля;
int x_precision – количество цифр в дробной части числа;
int x_fill – символ заполнения поля вывода.
Для управления этими полями используются методы width, precision и fill:
int ios :: width ( ) – возвращает значение ширины поля вывода;
int ios :: width ( ) – устанавливает значение ширины поля вывода;
int ios :: precision ( ) – возвращает значение точности представления дробной части;
int ios :: precision (int ) – устанавливает значение точности представления дробной части;
char fill ( ) – возвращает текущий символ заполнения;
char fill (char) – устанавливает значение текущего символа заполнения (по умолчанию – пробел).
Перед установкой некоторых флагов требуется сбросить флаги, которые не могут быть установлены одновременно с ними. Для этого удобно использовать вторым параметром метода setf статические константы класса ios:
adjustfield (left | right | internal)
basefield ( dec | oct | hex)
floatfield (scientific | fixed)
Пример
# include <iostream.h>
int main ( ) {
long a = 100, b = 077;
cout.width (7); cout.unsetf (ios :: dec);
cout.setf (ios :: hex | ios :: showbase | ios::uppercase);
cout << a;
cout.width (7);
cout << b << endl;
double d = 0.12, c = 1.3e-4;
cout.setf(ios :: left);
cout << d << endl;
cout << c;
return 0;}
Результат работы программы:
0X3T8 0X3F
0.12
0.00013