Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_Obektno-orientirovannoe_programmirovan...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
351.74 Кб
Скачать

ostream

Istream

Iostream

Ifstream

fstream

ofstream

Рис. 6.1. Упрощенная схема иерархии потоковых классов.

Названия классов, показанных на рис. 6.1:

ios -базовый потоковый класс;

istream - класс входных потоков;

iostream - класс двунаправленных потоков ввода-вывода;

ifstream - класс входных файловых потоков;

fstream - класс двунаправленных файловых потоков;

оfstream - класс выходных файловых потоков.

6.2. Форматирование ввода-вывода с помощью функций-членов класса ios

Имеется 2 способа форматирования ввода-вывода:

  1. с помощью функций-методов класса ios;

  2. С помощью манипуляторов – специальных операций, вставляемых непосредственно в поток вывода.

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

Для установки флагов форматирования используется функция setf(), формат которой имеет вид:

long setf(long flags);

Эта функция возвращает предыдущее значение флага, устанавливая его новое значение равным значению, заданному параметром flags. При этом все остальные флаги остаются неизменными. Например, для задания выравнивания поля вывода по правому краю следует установить флаг правого выравнивания right:

сout.setf(ios::right);

Замечание.

Поскольку флаги формата задаются внутри класса ios, доступ к ним должен осуществляться через класс ios и операцию расширения области видимости ::.

С помощью операции побитового ИЛИ можно установить одновременно столько флагов, сколько нужно. Например, можно установить флаг выравнивания поля вывода по левому краю left и флаг вставки пробелов между знаком и цифрами числами internal в одном вызове функции setf:

сout.setf(ios::left | ios:: internal);

В листинге 6.1 приведен пример программы, в которой используются некоторые флаги формата.

Листинг 6.1. Флаги формата.

#include <iostream.h>

main()

{// вывод с использованием установок по умолчанию

cout << 123.23 << " привет " << 100 << '\n';

cout << 10 << ' ' << -10 << '\n';

cout << 100.0 << '\n';

// теперь меняем формат

// флаг hex для вывода в шестнадцатеричной системе

// флаг scientific для вывода в чисел с плавающей точкой

// в научной нотации (в экспоненциальном виде)

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

cout << 123.23 << " привет " << 100 << '\n';

// установка флага showpos приводит к появлению

// знака + перед положительными десятичными величинами

cout.setf(ios::showpos);

cout << 10 << ' ' << -10 << '\n';

//флаг showpoint приводит к выводу десятичной точки и нулей

//справа для всех чисел с плавающей запятой вне зависимости

// от того, нужно это или нет

// флаг fixed задает вывод чисел с плавающей запятой

// в обычном виде, с шестью цифрами после запятой

cout.setf(ios::showpoint | ios::fixed);

cout << 100.0;

return 0;

}

Эта программа выводит следующее:

123.23 привет 100

10 -10

100

1.2323e+02 привет 64

a fffffff6

+100.000000

Кроме флагов формата, существуют три функции-члена, определяемые в классе ios, которые определяют параметры формата: ширину поля, точность и символ заполнения. Этими функциями являются:

width(), precision() и fill().

По умолчанию, ширина поля равна числу выводимых символов. Функция width(), прототип которой имеет вид:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]