Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

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

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

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

Добавлен: 13.12.2020

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

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

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

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

471 

Деструктор вызывает функции обратного вызова, адреса которых 
хранятся  в  стеке  обратного  вызова.  При  этом  первый  аргумент 
имеет  значение 

erase_event

.  После  этого  деструктор  разрушает 

объект. 

40.2.2.4. Инициализация объектов 

Для инициализации объектов шаблонного класса 

basic_ios<E, T>

 

в  шаблоне  этого  класса  определена  защищенная  (

protected

функция 

init

  void init(basic_streambuf<E, T> *sb); 

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

 

вызов функции 

rdbuf()

 возвращает указатель на буфер потока, 

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

sb

 функции 

init

 

вызов функции 

tie()

 возвращает пустой указатель; 

 

вызов  функции 

rdstate()

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

goodbit

,  если 

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

sb

 функции 

init

 не равно нулю, в против-

ном случае — значение 

badbit

 

вызов функции 

exceptions()

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

goodbit

 

вызов  функции 

flags()

, наследуемой от  класса 

ios_base

,  воз-

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

skipws|dec

 

вызов  функции 

width()

, наследуемой от  класса 

ios_base

,  воз-

вращает ноль; 

 

вызов  функции 

precision()

,  наследуемой  от  класса 

ios_base

возвращает значение 6; 

 

вызов функции 

fill()

 возвращает код пробела; 

 

вызов  функции 

getloc()

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

locale:: 

classic()

 

вызов  функции 

iword()

, наследуемой от  класса 

ios_base

,  воз-

вращает ноль для любого значения аргумента; 

 

вызов  функции 

pword()

, наследуемой от  класса 

ios_base

,  воз-

вращает пустой указатель для любого значения аргумента. 


background image

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

472 

40.2.2.5. Управление состоянием потока 

Для  управления  состоянием  потока  в  шаблоне  класса 

basic_ios<E, T>

 

определены следующие функции: 

  iostate rdstate() const; 
  void clear(iostate state = goodbit); 
  void setstate(iostate state); 
  bool good() const; 
  bool eof() const; 
  bool fail() const; 
  bool bad() const; 

Эти функции выполняют следующие действия: 

 

rdstate

 — возвращает битовую маску типа 

iostate

, хранимую 

в потоке; 

 

clear

 —  устанавливает  в  битовой  маске  типа 

iostate

  потока 

значение 

state|(rdbuf() != 0?goodbit:badbit)

,  после  этого, 

если значение 

state&exceptions()

 не равно нулю, выбрасывает 

исключение типа 

failure

 

setstate

 — вызывает функцию 

clear(state|rdstate())

 

good

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

true

,  если  выполняется  условие 

rdstate()==goodbit

, в противном случае — 

false

 

eof

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

true

,  если  в  битовой  маске  типа 

iostate

 установлен бит 

eofbit

, в противном случае — 

false

 

fail

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

true

,  если  в  битовой  маске  типа 

iostate

 установлен бит 

failbit

, в противном случае — 

false

 

bad

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

true

,  если  в  битовой  маске  типа 

iostate

 установлен бит 

badbit

, в противном случае — 

false

40.2.2.6. Управление исключениями 

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

basic_ios<E, T>

 

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

функции: 

  iostate exceptions() const; 
  iostate exceptions(iostate except); 


background image

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

473 

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

exceptions

 возвращает битовую маску исключе-

ний, хранимую в потоке. 
Вторая функция 

exceptions

 устанавливает в потоке битовую мас-

ку исключений, заданную параметром 

except

. Если в новой маске 

исключений  установлен вызывающий  исключение  бит,  то функ-
ция  выбрасывает  исключение  типа 

failure

,  в  противном  случае 

возвращает старую битовую маску исключений. 

40.2.2.7. Копирование состояния потока 

Для  копирования  состояний  потока  в  шаблоне  класса 

basic_ios<E, T>

 

определена функция

 

copyfmt

  basic_ios& copyfmt(const basic_ios& rhs); 

Эта  функция  выполняет  следующую  последовательность  дейст-
вий: 

 

устанавливает событие 

erase_event

 

копирует  в  текущий  поток  из  потока,  заданного  параметром 

rhs

, следующую информацию: 

 

символ заполнитель; 

 

указатель на объект типа 

basic_ios<E, T>

 

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

ios_base

 

устанавливает событие 

copyfmt_event

 

если  в  маске  исключений  установлены  биты,  то функция  вы-
зывает  функцию 

clear(rdstate())

,  в  противном  случае  воз-

вращает ссылку на текущий поток. 

40.2.2.8. Перегруженные операторы 

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

basic_ios<E, T>

 

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

раторы: 

  bool operator!() const; 
  operator void*() const; 

Оператор 

!

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

fail()


background image

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

474 

Оператор преобразования к типу 

void*

 возвращает пустой указа-

тель, только если выполняется условие 

fail()==true

40.2.2.9. Установка символа заполнителя 

Для  установки  символа  заполнителя  в  шаблоне  класса 

basic_ios<E, T>

 перегружены следующие функции: 

  char_type fill() const; 
  char_type fill(char_type ch); 

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

fill

 возвращает установленный в потоке символ 

заполнитель. 
Вторая  функция 

fill

  устанавливает  в  потоке  символ  заполни-

тель,  заданный  параметром 

ch

,  и  возвращает  старый  символ  за-

полнитель. 

40.2.2.10. Управление буфером 

Для  работы  с  указателем  на  буфер  потока,  который  хранится  в 
потоке, в шаблоне класса 

basic_ios<E, T>

 

перегружены следую-

щие функции: 

  basic_streambuf<E, T> *rdbuf() const; 
  basic_streambuf<E, T> *rdbuf(basic_streambuf<E, T> *sb); 

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

rdbuf

  возвращает  хранимый  в  потоке  указатель 

на буфер потока. 
Вторая  функция 

rdbuf

  сохраняет  в  потоке  указатель  на  буфер, 

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

sb

, и возвращает значение старого указате-

ля на буфер потока. 

40.2.2.11. Управление потоком вывода 

Для  работы  с  указателем  на  поток  вывода,  который  хранится  в 
потоке,  шаблоне  класса 

basic_ios<E, T>

 

перегружены  следую-

щие функции: 

  basic_ostream<E, T> *tie() const; 
  basic_ostream<E, T> *tie(basic_ostream<E, T> *str); 

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

tie

 возвращает хранимый в потоке указатель на 

поток вывода. 


background image

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

475 

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

tie

 сохраняет в потоке указатель на поток выво-

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

str

, и возвращает значение старого ука-

зателя на поток вывода. 

40.2.2.12. Управление локальностью 

Для  определения  локальности,  хранимой  в  потоке,  в  шаблоне 
класса 

basic_ios<E, T>

 определена функция 

imbue

  locale imbue(const locale& loc); 

Если указатель на буфер потока не пустой, то функция 

imbue

 вы-

зывает  функцию 

rdbuf()->pubimbue(loc)

.  В  любом  случае  функ-

ция возвращает значение 

ios_base::imbue(loc)

Кроме  того,  для  работы  с  локальностью  в  шаблоне  класса

 

basic_ios<E, T>

 

определены следующие функции: 

  char_type widen(char ch); 
  E widen(char ch); 
  char narrow(char_type ch, char dflt); 
  char narrow(E ch, char dflt); 

которые здесь рассматриваться не будут. 

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

fops

 

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

fops

 имеет следующий интерфейс: 

template <class St> class fops 

public: 
  // конструкторы 
  fpos(streamoff off); 
  explicit fpos(St state); 
  // функции для работы с состоянием индикатора позиции файла 
  St state() const; 
  void state(St state); 
  // перегруженные операторы 
  operator streamoff() const; 
  fpos& operator-=(streamoff off); 
  fpos& operator+=(streamoff off); 


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