ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4241
Скачиваний: 28
Часть IV. Стандартная библиотека языка программирования С++
466
40.2.1.6. Конструктор
Класс
ios_base
имеет единственный конструктор по умолчанию:
ios_base();
Конструктор является защищенным членом этого класса. Поэто-
му объекты класса
ios_base
могут быть созданы только в насле-
дуемых классах.
40.2.1.7. Оператор присваивания
В классе
ios_base
определен оператор присваивания:
ios_base& operator=(const ios_base& rhs);
Он позволяет присваивать объекты типа
ios_base
.
40.2.1.8. Класс
failer
В классе
ios_base
определен вложенный класс
failer
, который
имеет следующий интерфейс:
class failure: public exception
{
public:
explicit failure(const string& what_arg);
};
Этот класс служит базовым классом для всех исключений, кото-
рые может выбросить метод
clear
шаблонного класса
basic_ios
.
Класс
failer
наследует от базового класса
exception
метод
what
,
применение которого к объекту класса
failer
будет возвращать
значение
what_arg.data()
.
40.2.1.9. Класс
Init
В классе
ios_base
определен вложенный класс:
class Init {};
Создание объекта этого класса гарантирует создание стандарт-
ных потоков ввода/вывода, независимо от того, созданы или нет
эти потоки при запуске главной программы приложения.
Глава 40. Потоки ввода/вывода в C++
467
40.2.1.10. Управление разрешением дисплея
Для управления разрешением дисплея в классе
ios_base
перегру-
жены функции
precision
:
streamsize precision() const;
streamsize precision(streamsize prec);
Первая функция
precision
возвращает хранимое в потоке разре-
шение дисплея.
Вторая функция
precision
устанавливает новое разрешение дис-
плея, заданное параметром
prec
, и возвращает старое разрешение
дисплея.
40.2.1.11. Управление шириной поля ввода/вывода
Для управления шириной поля ввода/вывода в классе
ios_base
перегружены функции
width
:
streamsize width() const;
stramsize width(streamsize wide);
Первая функция
width
возвращает хранимую в потоке ширину
поля ввода/вывода.
Вторая функция
width
устанавливает новую ширину поля, задан-
ную параметром
wide
, и возвращает старую ширину.
40.2.1.12. Управление памятью
Для управления памятью, распределяемой под расширяемые мас-
сивы потоков, в классе
ios_base
определены функции
iword
и
pword
:
long& iword(int idx);
void*& pword(int idx);
Функция
iword
распределяет память под массив, элементы кото-
рого имеют тип
long
, и возвращает ссылку на элемент массива с
индексом, заданным параметром
idx
. При этом размерность соз-
данного массива не меньше, чем значение параметра
idx
.
Функция
pword
распределяет память под массив, элементы кото-
рого имеют тип
void*
, и возвращает ссылку на элемент массива с
Часть IV. Стандартная библиотека языка программирования С++
468
индексом, заданным параметром
idx
. При этом размерность соз-
данного массива не меньше, чем значение параметра
idx
.
Ссылки, возвращаемые функциями
iword
и
pword
, становятся не-
действительными после следующего вызова этих функций соот-
ветственно, после вызова функции
basic_ios::copyfmt
или после
разрушения потока деструктором.
Если параметр
idx
имеет отрицательное значение или память под
массив не может быть распределена, то функции
iword
и
pword
вызывают функцию
basic_ios::setstate(badbit)
и возвращают
недействительную ссылку.
Для получения индекса, который имеет одно и то же значение
для всех потоков типа
ios_base
в классе
ios_base
, определена ста-
тическая функция
xalloc
:
static int xalloc();
Эта функция возвращает хранимое статическое целочисленное
значение, а после этого увеличивает его на единицу.
40.2.1.13. Управление локальностью
Для работы с локальностями в классе
ios_base
определены функ-
ции
getloc
и
imbue
:
locale getloc() const;
locale imbue(const locale& loc);
Функция
getloc
возвращает хранимую в потоке локальность.
Функция
imbue
сохраняет в потоке локальность, заданную пара-
метром
loc
, после этого устанавливает событие
imbue_event
и
возвращает старую локальность. Пример использования функции
imbue
был приведен в листинге 40.2.
40.2.1.14. Синхронизация с потоками языка
программирования C
Для синхронизации потоков языка программирования C++ с по-
токами языка программирования С в классе
ios_base
определена
функция
sync_with_stdio
:
static bool sync_with_stdio(bool sync = true);
Глава 40. Потоки ввода/вывода в C++
469
Эта функция устанавливает во флаге, управляющем синхрониза-
цией потоков C и C++, значение, заданное параметром
sync
, и
возвращает старое значение этого флага. Начальное значение
флага синхронизации установлено в
true
.
Если флаг синхронизации установлен в
true
, то потоки C и С++
синхронизируют доступ к одному файлу.
Для синхронизации доступа к стандартным потокам C и С++
функция
sync_with_stdio
должна быть вызвана до выполнения
любых операций над этими потоками.
40.2.2. Шаблон класса
basic_ios
Шаблон класса определяется как
public
наследник класса
ios_base
template <class E, class T = char_traits<E>>
class basic_ios;
Параметр
E
шаблона задает тип символов, которые являются эле-
ментами потока, а параметр
T
определяет характеристики этих
символов. Подробно характеристики символов описаны в
разд. 39.1
.
Дополнительно к информации, наследуемой от объектов типа
ios_base
, объекты класса
basic_ios<E, T>
поддерживают сле-
дующую информацию о потоке
:
символ заполнитель;
указатель на буфер потока;
указатель на объект типа
basic_ios<E, T>
.
В этом разделе описаны все ассоциированные с классом
basic_ios<E, T>
типы, а также открытые (
public
) и защищенные
(
protected
) члены этого класса.
40.2.2.1. Ассоциированные типы
В шаблоне класса
basic_ios<E, T>
определены следующие типы,
которые определяются аргументами шаблона:
Часть IV. Стандартная библиотека языка программирования С++
470
typedef E char_type;
typedef T traits_type;
typedef typename T::int_type int_type;
typedef typename T::pos_type pos_type;
typedef typename T::off_type off_type;
Эти типы имеют следующее назначение:
char_type
— определяет тип символов, которые являются эле-
ментами потока;
traits_type
— определяет характеристики элементов потока;
int_type
— определяет целочисленный тип, который допуска-
ет преобразование к типу
char_type
и обратно без потери зна-
чения;
pos_type
— тип для описания индикатора позиции файла;
off_type
— тип для описания смещения в операциях по изме-
нению значения индикатора позиции файла.
40.2.2.2. Конструкторы
В шаблоне класса
basic_ios<E, T>
определен открытый
(
public
)
конструктор:
explicit basic_ios(basic_streambuf<E, T> *sb);
Параметр
sb
этого конструктора задает буфер потока. Этот кон-
структор вызывает защищенную функцию-член класса
init(sb)
,
которая инициализирует поток.
Также в шаблоне класса
basic_ios<E, T>
определен защищенный
(
protected
)
конструктор:
basic_ios();
Он создает объект этого класса без инициализации его членов.
40.2.2.3. Деструктор
В шаблоне класса
basic_ios<E, T>
определен открытый (
public
)
деструктор:
virtual ~basic_ios();