Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Предопределенные потоки




НЕФОРМАТИРУЕМЫЙ ВВОД-ВЫВОД

ФАЙЛОВЫЙ ВВОД-ВЫВОД С ИСПОЛЬЗОВАНИЕМ ПОТОКОВ

ФОРМАТИРОВАНИЕ ПОТОКА

ОПЕРАЦИИ ПОМЕЩЕНИЯ И ИЗВЛЕЧЕНИЯ ИЗ ПОТОКА

ПРЕИМУЩЕСТВА БИБЛИОТЕКИ ПОТОКОВ

ПРЕДОПРЕДЕЛЕННЫЕ ПОТОКИ

Безопасность типов

Расширяемость для новых типов

Простота и последовательность

Оператор помещения в поток

Оператор извлечения из потока

Форматирующие функции-члены

Флаги форматирования

Манипуляторы ввода-вывода

Функции ввода-вывода

Файлы с произвольным доступом

Опрос и установка состояния потока

Перегрузка операторов извлечения и вставки

Переадресация ввода-вывода

Наряду с функциями библиотеки времени выполнения, предназначенными для ввода-вывода, в C++ включен дополнительный набор объектно-ориентированных подпрограмм ввода-вывода. Главным преимуществом системы ввода-вывода C++ является то, что она может перегружаться для создаваемых классов.

Поток ввода-вывода – это логическое устройство, предназначенное для приема и выдачи информации пользователю. Поток связан с физическим устройством с помощью системы ввода-вывода C++. Поток обеспечивает пользователю единый интерфейс при работе с системой ввода-вывода. Это означает, что, например, для вывода информации на экран монитора и для записи ее в файл используется одна и та же функция.

Когда программа на C++ начинает выполняться, автоматически создаются восемь предопределенных стандартных потоков. Эти стандартные потоки связаны со стандартными файлами языка C следующим образом:

поток для "узких" символов cin cout cerr clog

поток для "широких" символов wcin wcout wclog

стандартный файл языка C stdin stdout stderr stderr

Объект cin управляет вводом из буфера потока, связанного с объектом stdin, объявленным в <cstdio>. По умолчанию эти два потока синхронизированы.

Объект cout управляет буфером потока, связанным с объектом stdout, объявленным в <cstdio>. По умолчанию эти два потока также синхронизированы.

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

Система ввода-вывода содержит две иерархии классов: первая предназначена для работы с ASCII-символами, имеющими длину 8 бит; вторая предназначена для работы с UNICODE-символами, имеющими длину 16 бит.

Символы первого набора называются "узкими", а второго – "широкими".

В основе иерархии потоковых классов лежит класс basic_ios.

Класс basic_ios является базовым для нескольких производных классов, среди которых классы basic_istream, basic_ostream и basic_iostream. Он содержит наиболее общие функции, необходимые для всех потоков, и обслуживает информацию о состоянии, которая отражает целостность потока и буфер потока. Классы, производные от basiс_ios, специализируют операции ввода-вывода. В свою очередь, basic_ios использует класс ios_base, который также является базовым классом для всех потоковых классов. Он не зависит от типа символов и инкапсулирует информацию, необходимую для всех потоков. Этот класс определяет несколько типов данных, используемых всеми потоковыми классами, такие как флаги форматирования, биты состояния, режимы открытия файлов и т.д.

С целью обеспечения совместимости с традиционной версией библиотеки ввода-вывода C++ введены синонимы для имен потоковых классов:

Шаблон класса Синоним Шаблон класса Синоним
basic_ios ios basic_ifstream ifstream
basic_istream istream basic_ofstream ofstream
basic_оstream оstream basic_fstream fstream
basic_iostream iostream basic_streambuf streambuf

Имена синонимов в точности соответствуют именам потоковых классов в традиционной версии библиотеки ввода-вывода C++. Далее при изложении потокового ввода-вывода и мы будем пользоваться этими именами, поскольку как раз эти имена следует указывать в программах.

Библиотека ввода-вывода содержит два параллельных семейства классов: одно – производное от streambuf и второе – производное от ios. Оба эти класса являются низкоуровневыми, выполняющими различный вид задач. Все потоковые классы имеют, по крайней мере, один из этих классов в качестве базового. Доступ из ios -производных классов к streambuf -производным осуществляется через указатель.

Класс streambuf обеспечивает интерфейс с памятью и физическими устройствами. Функции-члены семейства классов streambuf используются ios -производными классами.

Назначение классов потокового ввода-вывода следующее:

istream потоковый класс общего назначения для ввода, являющийся базовым классом для других потоков ввода;

ifstream потоковый класс для ввода из файла;

istream_withassign потоковый класс ввода для cin;

istrstrearm потоковый класс для ввода строк;

оstream потоковый класс общего назначения для вывода, являющийся базовым классом для других потоков вывода;

ofstream потоковый класс для вывода в файл;

ostream_withassign потоковый класс ввода для cout, cerr, clog;

ostrstream потоковый класс для вывода строк;

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

fstream потоковый класс для ввода-вывода в файл;

strstream потоковый класс для ввода-вывода строк;

stdiostream класс для ввода-вывода в стандартные файлы ввода-вывода;

streambuf абстрактный базовый класс буфера потока;

filebuf класс буфера потока для дисковых файлов;

strstreambuf класс буфера потока для строк;

stdiobuf класс буфера потока для стандартных файлов ввода-вывода.

Назначение почти всех классов следует из их названия. Классы группы _withassign являются производными соответствующих потоковых классов без этого окончания. Они перегружают оператор присваивания, что позволяет изменять указатель на используемый классом буфер. Если подключен заголовочный файл <iostream>, программы, написанные на языке C++, начинают выполняться с четырьмя открытыми предопределенными потоками, объявленными как объекты классов группы _withassign следующим образом:

istream_withassign cin; // соответствует stdin

ostream_withassign cout; // соответствует stdout

ostream_withassign cerr; // соответствует stderr

ostream_withassign clog; // буферизованный cerr

В Microsoft Visual C++ предопределенные потоки cin, cout, cerr и clog инициализирует спеціально для этого предназначенный статический класс iostream_init.

ПРЕИМУЩЕСТВА БИБЛИОТЕКИ ПОТОКОВ C++

Библиотека потоков C++ предоставляет несколько преимуществ в сравнении с функциями вводавывода библиотеки времени выполнения.




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 814; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.