Программирование >>  Операторы преобразования типа 

1 ... 179 180 181 [ 182 ] 183 184 185 ... 239


ioa

base

baaic

ios /

ioeo

wios

bas ic a treambuf<>

streambuf / wstreambuf


ivirtual}


baa i c ia tre ano

istream / wistream


baaic oatreaza<>

ostream / wOStream


basic iostreaiii<>

iostream / wiostream

Рис. 13.1. Иерархия основнь1Х потоковых классов

Ниже перечислены задачи, решаемые классами этой иерархии.

О Базовый класс ios base определяет свойства всех потоковых классов, пе зависящие от типа и трактовок символов. Класс в основном состоит из компонентов и функций, предназначенных для управления состоянием и флагами формата.

О Шаблон класса basicjoso, производный от ios base<>, определяет общие свойства всех потоковых классов, зависящие от типа и трактовок символов. В число этих свойств входит определение буфера, используемого потоком данных. Буфер представлен объектом класса, производным от базового класса basic streambuf<>, с соответствующей специализацией. Фактически именно он выполняет операции чтения/записи.

О Шаблоны basic istream<> и basic ostream<>, виртуально производные от basic ioso, определяют объекты, которые могут использоваться соответственно для чтения и записи. Эти классы, как и basicjoso, оформлены в виде шаблонов, параметризованных по типу и трактовкам символов. Если проблемы интернационализации несущественны, задейстпуются специализации этих классов для типа символов char (а именно istream и ostream).

О Шаблон basicjostreamo является производным от двух шаблонов - basic istreamo и basic ostream<>. Он определяет объекты, которые могут использоваться как для чтения, так и для записи.

О Шаблон basic streambuf<> занимает центральное место в библиотеке lOStream. Он определяет интерфейс всех представлений, записываемых в потоки данных или читаемых из потоков данных, и используется другими потоковыми классами для фактического чтения или записи символов. Для получения доступа к некоторым внешним представлениям классы объявляются производными от basic streambuf<>. Подробности приведены далее.



Назначение потоковых буферных классов

Биб,лиогека lOStream проектировалась со строгим разделением обязанностей. Классы, ироизводиыс от basicjos, всего лишь ограничиваются форматированием данных. Операции чтения и записи символов выполняются потоковыми буферами, которые представлены объектами, подчиненными ас отношению к классу basic ios. Потоковые буферы обеспечивают вьшолиеиис чтения/записи в символьных буферах и помогают абстрагироваться от внешнего представления (например, файлов или строковых данных).

Потоковые буферы играют важную роль при выполнении ввода-вьшода с новыми внешними представлениями (например, сокетами или компонентами графического интерфейса), перенаправлении потоков данных или их конвейерном объединении (например, при сжатии выходных данных перед их передачей в другой поток данных). Кроме того, потоковые буферы обеспечивают синхронизацию при одновременном вводе-выводе с одним внешним представлением. Дополнительная информация приведена иа с. 613.

Потоковые буферы упрощают определение новых внешних представлений (скажем, предназначенных для работы с новым носителем данных). Для этого требуется лишь объявить новый потоковый буферный класс, производный от basic streambuf<> (или его подходящей специализации) и определить функции чтения и/или записи символов для нового внешнего представления. Все возможности форматированного ввода-вьшода автоматически становятся доступными, когда объект потока данных инициализируется для использования объекта нового потокового буферного класса. На с. 636 рассказано, как определяются новые потоковые буферы для работы со специальными носителями данных.

Подробные определения классов

Как и все шаблонные классы библиотеки lOStream, шаблон basicjoso параметризуется по двум аргументам, а его определение выглядит так:

namespace std {

template <class charT.

class traits = ch3r traits<charT> > class basicjos:

В аргументах шаблона передается тип символов, используемый потоковыми классами, и класс с описанием трактовок этого типа.

В частности, трактовки класса определяют признак конца файла- и способы копирования/перемещения ряда символов. Как правило, тип символов ассоциируется с определенным набором трактовок, поэтому будет вполне логично определить шаблонный класс, специализируемый для конкретных типов символов.

На самом деле они не делают даже этого! Форматирование поручается соответствующим фацетам библиотеки локального контекста. Дополнительная информация о фацетах приведена иа с. 670 и 676.

Термин конец файла в данном контексте означает конец входных даШых , что соответствует интерпретации константы EOF в языке С,



Соответственно по умолчанию используется класс трактовок char traits<charT>, где charT - тип символов. Стандартная библиотека С++ содержит специа-тиза-ции шаблона char traits для типов символов char и wchar t. За дополнительной информацией о трактовках символов обращайтесь к с. 659.

Существуют две специализации класса basicjoso для двух самых распространенных типов символов:

namespace std {

typedef bas1c 1os<char> 1os: typedef basic 1os<wchar t> wios;

Тип ios соответствует базовому классу старой библиотеки lOStream, разработанной AT&T, и может использоваться для обеспечения совместимости со старыми программами С++.

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

namespace std {

template <class charT.

class traits = char tra1ts<charT> > class basic streambuf; typedef bas1c streambuf<char> streambuf; typedef bas1c streambuf<wchar t> wstreambuf;

Конечно, шаблоны basicjstreamo, basic ostream<> и basic iostream<> тоже параметризуются по типу символов и классу трактовок:

namespace std {

template <class charT,

class traits = char tra1ts<charT> > class baslc istream;

template <class charT,

class traits = char tra1ts<charT> > class bas1c ostream;

template <class charT.

class traits = char tra1ts<charT> >

class basic iostream:

По аналогии с другими классами также существуют специализации для двух важнейший типов символов:

namespace std {

typedef bas1c 1stream<char> Istream; typedef basic istream<wchar t> wistream;

typedef bas1c 1stream<char> ostream; typedef basic 1stream<wchar t> wostream;



1 ... 179 180 181 [ 182 ] 183 184 185 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика