38.Способы управления форматом выходных данных.
Библиотека потоков С++ предусматривает три способа управления форматом выходных данных: вызов форматирующих функций, использование флагов и применение манипуляторов. Далее будут рассмотрены эти способы.
Большинство средств управления вводом-выводом сосредоточены в классе ios, члены которого (переменные и функции) будут в основном и рассматриваться. Этот класс является базовым для ostream и istream.
По сути, здесь находится управление связью между istream или ostream и буфером, используемым для операций ввода-вывода. Именно класс ios контролирует: как символы попадают в буфер и как они выбираются оттуда.
К функциям форматирования относятся следующие функции класса ios:
width() - определения ширины поля;
fill() - определения символа-заполнителя;
precision() - определения точности чисел с плавающей точкой.
Определение ширины поля:
int width() - возвращает текущее значение внутренней переменной ширины поля потока;
int width(int) - устанавливает значение внутренней переменной ширины поля и возвращает предыдущее значение.
Определение символа-заполнителя:
char fill() - возвращает текущий символ-заполнителя;
char fill(char) - устанавливает символ-заполнитель и возвращает его предыдущее значение. Установленный символ используется вместо пробела для дополнения полей при выводе до указанной ширины
Определение точности чисел с плавающей точкой:
int precision() - возвращает текущее значение внутренней переменной точности;
int precision(int) - устанавливает значение внутренней переменной точности и возвращает предыдущее значение.
В классе ios содержатся флаги, определяющие порядок форматирования ввода и вывода. Эти флаги являются однобитовыми полями, хранящимися в переменной типа long. Установка и получение значений флагов выполняется специальными функциями класса ios. Значения установленных флагов форматирования:
skipws - пропуск начальных пробелов при вводе (или эквивалентных им символов) (по умолчанию);
left - выравнивание выводимых данных влево;
right - выравнивание выводимых данных вправо (по умолчанию);
internal - знак числа выводится слева, а число выравнивается вправо;
showpos - вывод знака '+' для положительных чисел;
dec - вывод числа по основанию 10 (по умолчанию);
oct - вывод числа по основанию 8;
hex - вывод числа по основанию 16;
showbase - при выводе не десятичных чисел добавляется индикатор основания:
"0" - для восьмиричных, "0x" - для 16-тиричных;
showpoint - при выводе вещественных чисел отображать десятичную точку;
uppercase - вывод шестнадцатиричных цифр 'A' - 'F' и обозначения экспоненты - 'E' в верхнем регистре;
scientific - вывод вещественных чисел выполнять в формате x.xxxxEy;
fixed - вывод вещественных чисел выполнять в формате xxx.xxxxxx.
Имена флагов заданы в виде перечисления в классе ios и доступны для испрользования.
Флаги left/right/internal, флаги dec/oct/hex и scientific/fixed взаимно исключают друг друга и не могут быть одновременно установлены.
Функции управления флагами:
long flags() - возвращает текущие флаги потока;
long flags(long) - присваивает флагам значение и возвращает прежнее значение флагов потока;
long setf(long) - устанавливает в единицу флаги, биты которых установлены в параметре, возвращает прежнее значение флагов;
long setf(long,long) - присваивает флагам, биты которых перечислены вторым параметром, значение бит первого параметра;
long unsetf(long) - сбрасывает флаги, биты которых установлены в параметре, возвращает прежнее значение флагов.
Примеры:
cout.flags(cout.flags()|ios::showpos); // вывод знака '+'
cout.setf(ios::showpos); // вывод знака '+'
cout.setf(ios::showpos); // вывод знака '+'
cout.unsetf(ios::showpos); // отмена вывода знака '+'
cout.setf(ios::left,ios::left|ios::rigth|ios::internal); // выравнивание влево.
Так как установка одного из взаимоисключающих флагов должна вестись одновременно со сбросом других связанных с ним флагов, в классе ios описан набор констант для использования в качестве второго параметра функции setf():
static const long basefield; // dec | oct | hex
static const long adjustfield; // left | right | internal
static const long floatfield; // scientific | fixed
Следует отметить, что управление вводом-выводом с помощью установки и отмены флагов является решением, которое может привести к ошибкам. Предпочтительнее, там, где это возможно, использовать манипуляторы, которые будут рассмотрены далее.
- 99. Типы диаграмм языка uml
- 98. Унифицированный язык моделирования uml.
- 100. Диаграмма классов (class diagram).
- Концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;
- Точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;
- Точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).
- 102. Компонентно-ориентированное проектирование
- Объектно-ориентированное проектирование на основе иерархии классов.
- 93. Гетерогенные контейнеры adt шаблонов
- Компонентные классы как основа систем визуального программирования.
- Построение каркасов приложений в среде современных систем программирования.
- Производные классы: наследование.
- Термин наследование и применение к классам и их характеристикам
- Создание объекта производного класса.
- Расширение производного класса.
- Создание объекта производного класса и вызов конструкторов
- Производные классы: полиморфизм.
- Множественное наследование в классе, порождённом от нескольких родительских классов-предков.
- Производные классы: полиморфная функция
- Иерархия классов
- 39.Простые манипуляторы для управления потоком
- Прядок вызова конструкторов в производных классах
- Виртуальные базовые классы.
- Порядок построения виртуальных базовых классов.
- 25. Указатель на абстрактный класс.
- 28.Технология объектно-ориентированного программирования.
- Интерфейс пользователя и абстрактный класс.
- 35.Предопределенные объекты-потоки.
- 29. Применение шаблонов классов и шаблонов функций.
- 30.Объекты класса и указатели на объекты класса.
- 31.Члены данных объекта и указатели на члены данных класса.
- 32.Указатели на функции-члены класса и указатели на статические члены данных.
- 36.Стандартный ввод-вывод.
- 34.Создание и организация взаимодействие потоков ввода-вывода.
- 37.Методы позиционирования потоков.
- 38.Способы управления форматом выходных данных.
- 42.Организация ввода-вывода для пользовательского типа
- 40.Параметризованные манипуляторы и форматирующие функции.
- 41.Состояния потока.
- 43.Методы опроса и установки состояния потока.
- 44.Обработка ошибок в потоке через определение и установку состояния потока.
- 45.Последовательность действий при создании ostream.
- 46.Открытие и закрытие файла.
- 47.Методы ввода-вывода.
- 13.Преобразование типов в производных классах.
- 14.Разрешение области видимости в производных классах
- 15.Виртуальные функции.
- 16.Нестатические компонентные функции класса.
- 17.Применение виртуальных функций.
- 18.Вызов виртуальных функций в конструкторе.
- 19.Вызов полиморфных функций базового класса.
- 20.Вызов полиморфных функций через базовые классы.
- 21.Вызов виртуальной функции через таблицу виртуальных методов.
- 22.Ограничения на использование виртуальных функций.
- 23.Чистая виртуальная функция.
- 24.Абстрактный класс и его использование.
- 80.Контейнер объектов List
- 82.Контейнеры шаблонов fds (Fundamental Data Structures).
- 76.Класс итераторов объектов: внешние и внутренние итераторы.
- 81.Контейнер объектов Stack
- 71.Контейнерные классы объектов: понятие контейнерного класса.
- 72.Итераторы в контейнерных классах объектов как друзья класса.
- 48.Бинарные файлы.
- 49.Чтение бинарных файлов.
- 50.Запись в бинарные файлы.
- 51.Инициализация потоков с помощью конструктора.
- 52.Текстовые файлы для ввода-вывода.
- 60.Дружественные шаблоны.
- 53.Форматирование в памяти с использованием потоков strstream.
- 54.Шаблон класса.
- 69.Механизм обработки исключений.
- 56.Создание шаблонного класса.
- 57.Шаблон функции, объявление.
- 61.Функциональное замыкание при разработке приложений.
- 58.Запись шаблона функции с несколькими обобщенными аргументами.
- 65.Исключение как статический объект.
- 64.Объектно-ориентированный подход к обработке исключений.
- 66.Генерации исключения.
- 85.Гомогенные и гетерогенные контейнеры шаблонов fds.
- 63.Использование конструкторов и деструкторов в роли «вступления» и «заключения».
- 67.Операторы throw и catch.
- 68.Обработчик исключений.
- 70.Понятие контролируемого блока при обработке исключений.
- 84.Способы хранения элементов в контейнерах шаблонов fds.
- 83.Вектора и списки в контейнере шаблонов.
- Стандартные контейнеры библиотеки stl
- 86.Fds контейнеры шаблонов векторов
- 62.Функциональное замыкание через наследование.
- 87.Fds контейнеры шаблонов списков
- 89.Способы реализации и префиксы имен adt-контейнеров шаблонов.
- 88.Контейнеры шаблонов adt (Abstract Data Types) и их классификация.
- 90.Типы adt-контейнеров шаблонов.
- 91.Массивы adt-контейнеров шаблонов.
- 92.Стеки adt-контейнеров шаблонов.
- 78.Контейнер объектов Array
- 74.Класс контейнеров объектов: разбиение контейнеров на группы.
- 77.Иерархия классов итераторов объектов
- 79.Контейнер объектов SortedArray
- 73.Библиотека контейнерного класса структур данных.