ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4239
Скачиваний: 28
Глава 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
, воз-
вращает пустой указатель для любого значения аргумента.
Часть 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);
Глава 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()
.
Часть 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
возвращает хранимый в потоке указатель на
поток вывода.
Глава 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);