Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

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

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

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

Добавлен: 13.12.2020

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

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

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

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

476 

  streamoff operator-(const fpos& rhs) const; 
  fpos operator-(streamoff off) const; 
  fpos operator+(streamoff off) const; 
  bool operator==(const fpos& rhs) const; 
  bool operator!=(const fpos& rhs) const; 
}; 

Этот шаблон класса предназначен для определения индикаторов 
позиции файла. Параметр 

St

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

fops

 задает тип объ-

екта, который хранит состояние строки длинных (multibyte) сим-
волов, которая хранится в буфере потока. 
Объекты класса 

fops<St>

 содержат, по крайней мере, два объекта: 

объект типа 

streamoff

, который задает смещение в байтах, и объ-

ект типа 

St

Конструкторы  шаблонного  класса 

fops<St>

  выполняют  следую-

щие действия: 

 

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

off

, и инициализирует 

объект-член типа 

St

; начальное смещение равное 

-1

 считается 

неправильным; 

 

второй  конструктор  устанавливает  начальное  значение  рав-
ным  нулю  и  инициализирует  объект-член  типа 

St

  значением, 

заданным параметром 

state

Для  работы  с  состоянием  строки  длинных  (multibyte)  символов 
предназначены  функции 

state

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

действия: 

 

первая  функция 

state

  возвращает  состояние  строки  длинных 

символов, хранящееся в индикаторе позиции; 

 

вторая  функция 

state

  устанавливает  в  индикаторе  позиции 

состояние  строки  длинных  символов,  заданное  параметром 

state

Операторы,  перегруженные  в  шаблоне  класса 

fops<St>

,  имеют 

следующее назначение: 

 

streamoff

 —  возвращает  смещение,  хранимое  в  индикаторе 

позиции; 


background image

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

477 

 

-=

 —  вычитает  из  смещения,  хранимого  в  текущем  объекте, 

значение параметра 

off

 

+=

 — прибавляет к смещению, хранимому в текущем объекте, 

значение параметра 

off

 

 -

 — первый оператор возвращает разность между смещения-

ми,  хранящимися  в  текущем  объекте  и  в  объекте,  заданном 
параметром 

rhs

;  второй  оператор  возвращает  объект 

fops(*this)-=off

 

+

 — возвращает объект 

fops(*this)+=off

 

==

 —  возвращает  значение 

true

,  если  текущий  объект  равен 

объекту, заданному параметром 

rhs

, иначе — значение 

false

 

!=

 — возвращает значение 

true

, если текущий объект не равен 

объекту, заданному параметром 

rhs

, иначе — значение 

false

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

fpos<mbstate_t>

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

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

streampos

  и 

wstreampos

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

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

ios

 и 

wios

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

Здесь 

mbstate_t

 —  синоним  некоторого  типа,  который  использу-

ется для представления состояния строки длинных символов. 

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

Манипулятор

 — это функция, которая изменяет поток. В заголо-

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

str

 

ios_base& boolalpha(ios_base& str);

 — флаг 

boolalpha

 

 

ios_base& dec(ios_base& str);

 — флаг 

dec

 

 

ios_base& fixed(ios_base& str);

 — флаг 

fixed

 

 

ios_base& hex(ios_base& str);

 — флаг 

hex

 

 

ios_base& internal(ios_base& str);

 — флаг 

internal

 

 

ios_base& left(ios_base& str);

 — флаг 

left

 

 

ios_base& oct(ios_base& str);

 — флаг 

oct

 

 

ios_base& right(ios_base& str);

 — флаг 

right

 


background image

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

478 

 

ios_base& scientific(ios_base& str);

 — флаг 

scientific

 

 

ios_base& showbase(ios_base& str);

 — флаг 

showbase

 

 

ios_base& showpoint(ios_base& str);

 — флаг 

showpoint

 

 

ios_base& showpos(ios_base& str);

 — флаг 

showpos

 

 

ios_base& skipws(ios_base& str);

 — флаг 

skipws

 

 

ios_base& unitbuf(ios_base& str);

 — флаг 

unitbuf

 

 

ios_base& uppercase(ios_base& str);

 — флаг 

uppercase

 

Кроме  того,  в  заголовочном  файле  ios  определены  следующие 

манипуляторы,  которые  сбрасывают  флаги,  хранимые  в  потоке, 
заданном параметром 

str

 

ios_base& noboolalpha(ios_base& str);

 — флаг 

boolalpha

 

 

ios_base& noshowbase(ios_base& str);

 — флаг 

showbase

 

 

ios_base& noshowpoint(ios_base& str);

 — флаг 

showpoint

 

 

ios_base& noskipws(ios_base& str);

 — флаг 

skipws

 

 

ios_base& nounitbuf(ios_base& str);

 — флаг 

unitbuf

 

 

ios_base& nouppercase(ios_base& str);

 — флаг 

uppercase

 

В листинге 40.3 показан пример изменения состояния флагов по-

тока  при  помощи  манипуляторов.  Сравнение  с  листингом  40.1 

показывает,  что  состояние  флага  удобнее  изменять  манипу- 
лятором,  чем  функциями 

setf

  и 

unsetf

,  рассмотренными  в 

разд. 40.2.1.3

Листинг 40.3. Пример использования манипуляторов 

#include <iostream> 
using namespace std; 
 
int main() 

  cout << boolalpha << false << endl;     // false 
  cout << hex << showbase << 32 << endl;  // 0x20 
  cout << noshowbase << 32 << endl;       // 20 
 
  return 0; 


background image

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

479 

40.3. Базовые потоки вывода 
<ostream> 

В  заголовочном  файле  ostream  определен  шаблон  класса 

basic_ostream<E, T>

, который определяет базовые классы для по-

токов  вывода,  а  также  типы —  синонимы  специализаций  этого 
шаблона: 

namespace std 

  template<class E, class T = char_traits<E>> 
      class basic_ostream; 
  typedef basic_ostream<char, char_traits<char>> 
      ostream; 
  typedef basic_ostream<wchar_t, char_traits<wchar_t>> 
      wostream; 

Кроме того, в заголовочном файле ostream перегружены шаблоны 
оператора 

<<

  для  форматированного  вывода  символов  и  строк 

языка программирования C, а также определены шаблоны мани-
пуляторов 

endl

ends

  и 

flush

, работающих с выходными потока-

ми. 

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

basic_ostream

 

Шаблон класса определяется как 

virtal

 и 

public

 наследник шаб-

лона класса 

basic_ios<E, T>

  template<class E, class T = char_traits<E>> 
      class basic_ostream; 

Этот шаблон предназначен для создания шаблонных классов по-
токов вывода. 
Параметр 

E

 шаблона задает тип символов, которые являются эле-

ментами  потока,  а  параметр 

T

  определяет  характеристики  этих 

символов.  Подробно  характеристики  символов  описаны  в 

разд. 39.1


background image

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

480 

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

basic_ostream<E, T>

 

типы, а также открытые (public) члены этого 

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

40.3.1.1. Ассоциированные типы 

В  шаблоне  класса 

basic_ostream<E, T>

 

определены  следующие 

типы, которые определяются аргументами шаблона: 

  typedef typename basic_ios<E, T>::char_type char_type; 
  typedef typename basic_ios<E, T>::traits_type traits_type; 
  typedef typename basic_ios<E, T>::int_type int_type; 
  typedef typename basic_ios<E, T>::pos_type pos_type; 
  typedef typename basic_ios<E, T>::off_type off_type; 

Отсюда  видно,  что  эти  типы  являются  синонимами  соответст-
вующих  типов,  определенных  в  шаблоне  класса 

basic_ios<E, T>

 

и описанных в 

разд. 40.2.2.1

40.3.1.2. Конструктор 

В шаблоне класса 

basic_ostream<E, T>

 определен конструктор: 

  explicit basic_ostream(basic_streambuf<E, T> *sb); 

Параметр 

sb

  этого  конструктора  задает  буфер  потока  вывода. 

Этот конструктор вызывает защищенную функцию 

init(sb)

, ко-

торая  наследуется  от  класса 

basic_ios<E, T>

  и  инициализирует 

поток. 

40.3.1.3. Деструктор 

В  шаблоне  класса 

basic_ostream<E, T>

 

определен

 

деструктор, 

который разрушает выходной поток, не выполняя при этом ника-
ких операций над буфером потока: 

  virtual ~ostream();

,

 

40.3.1.4. Перегруженный оператор вывода 

<<

 

Вывод данных из памяти в поток называется форматированным, 
если при выводе представление данных преобразуется из битово-


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