Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4103

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

  

 
 

Г Л А В А  

40 

 
 
 

Потоки ввода/вывода  

в C++ 

40.1. Структура  

стандартной библиотеки ввода/вывода 

Как уже говорилось в 

разд. 30.1

потоком

 называется логический 

или,  другими  словами,  программный  интерфейс,  который  обес-
печивает доступ к файлу. В языке программирования C++ потоки 
ввода/вывода  представляются  объектами  шаблонных  классов. 
Сами  шаблоны  потоков  определены  в  стандартной  библиотеке 
ввода/вывода языка программирования C++, которая организова-
на как иерархия шаблонов классов. 
В  стандартной  библиотеке  определены  два  множества  шаблон-
ных  классов  этой  иерархии:  одно  для  работы  с  символами  типа 

char

,  другое  для  работы  с  символами  типа 

wchar_t

.  Классы  для 

работы с символами типа 

char

  имеют синонимы, имена  которых 

соответствуют  именам  шаблонов  классов,  но  не  содержат  слова 

basic

  и  символа 

_

.  Например,  для  шаблонного  класса 

basic_ 

istream<char>

 определен тип-синоним 

istream

. Шаблонные клас-

сы для работы с символами типа 

wchar_t

 имеют те же имена, что 

и  классы  для  работы  с  символами  типа 

char

,  но  с  префиксом 

w

Например,  для  шаблонного  класса 

basic_istream<wchar>

  опреде-

лен тип-синоним 

wistream

Ниже  перечислены  заголовочные  файлы, а  также классы  и шаб-
лоны классов из стандартной библиотеки ввода/вывода, которые 
определены в этих файлах: 

  

 


background image

Глава 40. Потоки ввода/вывода в C++ 

457 

 

ios

 — класс 

ios_base

, шаблон класса 

basic_ios

 

ostream

 — шаблон класса 

basic_ostream

 

istream

 — шаблоны классов 

basic_istream

 и 

basic_iostream

 

iostream

 —  стандартные  потоки 

cin

cout

cerr

clog

  и 

wcin

wcout

wcerr

wclog

 

fstream

 —  шаблоны  классов 

basic_filebuf

basic_ifstream

basic_ofstream

 и 

basic_fstream

 

strstream

 —  классы 

strstreambuf

istrstream

ostrstream

  и 

strstream

 

sstream

 

—  шаблоны  классов 

basic_stringbuf

basic_ 

istringstream

basic_ostringstream

 и 

basic_stringstream

 

streambuf

 — шаблон класса 

basic_streambuf

 

Рис. 40.1. 

Иерархия шаблонов классов стандартной библиотеки ввода/вывода 

В  следующих  разделах  все  классы  и  шаблоны  классов,  опреде-
ленные  в  стандартной  библиотеке  ввода/вывода,  будут  рассмот-
рены подробно. 


background image

Часть IV. Стандартная библиотека языка программирования С++ 

458 

40.2. Базовые классы потоков <ios> 

В  заголовочном  файле  ios  определены  следующие  классы,  шаб-
лоны классов и типы: 

namespace std 

  typedef T1 streamoff; 
  typedef T2 streamsize; 
 
  class ios_base; 
  template <class E, class T = char_traits<E>> 
      class basic_ios; 
  typedef basic_ios<char, char_traits<char>> ios; 
  typedef basic_ios<wchar_t, char_traits<wchar_t>> wios; 
  template <class St> class fpos; 
  typedef fpos<mbstate_t> streampos; 
  typedef fpos<mbstate_t> wstreampos; 

Тип 

streamoff

  является  синонимом  некоторого  целочисленного 

типа 

T1

, который зависит от реализации и имеет длину, по край-

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

streamoff(-1)

Тип 

streamsize

  является  синонимом  некоторого  целочисленного 

типа 

T2

, который зависит от реализации и имеет длину, по край-

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

ios_base

 определены методы, которые являются общими 

для  входных  и  выходных  потоков  и,  кроме  того,  не  зависят  от 
параметров шаблонов. 
В классе шаблоне класса 

basic_ios

 определены методы, которые 

также  являются  общими  для  входных  и  выходных  потоков,  но 
зависимы от параметров шаблонов. 


background image

Глава 40. Потоки ввода/вывода в C++ 

459 

Для  специализаций 

basic_ios<char

char_traits<char>>

 

и 

basic_ios<wchar_t

char_traits<wchar_t>>

  шаблонного  класса 

basic_ios

 объявлены типы синонимы 

ios

 и 

wios

, которые опреде-

ляют  базовые  потоки  ввода/вывода  для  работы  с  символами  ти-
пов 

char

 и 

wchar_t

 соответственно. 

Шаблон  класса 

fpos

  определяет  индикатор  позиции  потока.  Для 

специализации 

fpos<mbstate_t>

  этого  шаблона  класса  объявлены 

типы  синонимы 

streampos

  и 

wstreampos

,  которые  предназначены 

для работы с потоками типов 

ios

 и 

wios

 соответственно. 

Кроме  того,  в  заголовочном  файле  ios  объявлены  функции  не 
члены классов, которые изменяют состояние потока. Такие функ-
ции называются 

манипуляторами

Все  эти  классы  и  функции  будут  подробно  рассмотрены  
ниже. 

40.2.1. Класс 

ios_base

 

Объекты  типа 

ios_base

  поддерживают  следующую  информацию 

о состоянии потока: 

 

флаги форматирования в объекте типа 

fmtflags

 

ширину поля ввода/вывода в объекте типа 

int

 

разрешение дисплея в объекте типа 

int

 

маску исключений в объекте типа 

iostate

 

стек вызовов 

callback

 функций при наступлении событий типа 

event

 

внутренний расширяемый массив с элементами типа 

long

 

внутренний расширяемый массив с элементами типа 

void*

 

объект типа 

locale

, в котором хранится информация о локаль-

ности. 

В этом разделе описаны все определенные в классе 

ios_base

  ти-

пы,  открытые  (

public

)  члены  этого  класса,  а  также  конструктор 

этого класса, который является защищенным (

protected

) членом. 


background image

Часть IV. Стандартная библиотека языка программирования С++ 

460 

40.2.1.1. Флаги 

В классе 

ios_base

  определен  тип 

fmtflags

, который является си-

нонимом вложенного типа 

T1

, зависимого от реализации класса и 

определяющего битовую маску: 

  typedef T1 fmtflags; 

В классе 

ios_base

 определены следующие флаги, которые управ-

ляют режимами работы потока и могут быть установлены в этой 
битовой маске: 

  static const fmtflags boolalpha, dec, fixed, hex, 
      internal, left, oct, right, scientific, 
      showbase, showpoint, showpos, skipws, unitbuf, 
      uppercase, adjustfield, basefield, floatfield; 

Эти флаги имеют следующее назначение: 

 

boolalpha

 —  ввод/вывод  булевых  данных  в  текстовом  фор- 

мате; 

 

dec

 —  ввод/вывод  целочисленных  данных  в  десятичном  фор-

мате; 

 

fixed

 —  ввод/вывод  чисел  с  плавающей  точкой  в  формате  

с точкой и без экспоненты; 

 

hex

 —  ввод/вывод  целочисленных  данных  в  шестнадцатерич-

ном формате; 

 

internal

 —  вставка  символа  заполнителя  внутрь  поля  вывода 

до достижения нужной ширины этого поля; 

 

left

 —  вставка  символа  заполнителя  в  конец  поля  вывода  до 

достижения нужной ширины этого поля; 

 

oct

 —  ввод/вывод  целочисленных  данных  в  восьмеричном 

формате; 

 

right

 — вставка символа заполнителя в начало поля вывода до 

достижения нужной ширины этого поля; 

 

scientific

 — ввод/вывод чисел с плавающей точкой в форма-

те с точкой и экспонентой; 

 

showbase

 —  вывод  перед  целочисленным  числом  префикса, 

который указывает систему счисления; 


Смотрите также файлы