Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

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

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

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

Добавлен: 13.12.2020

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

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

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

Часть 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 {}; 

Создание  объекта  этого  класса  гарантирует  создание  стандарт-
ных потоков ввода/вывода, независимо от того, созданы или нет 
эти потоки при запуске главной программы приложения. 


background image

Глава 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*

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


background image

Часть 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); 


background image

Глава 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>

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

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


background image

Часть 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(); 


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