КАТЕГОРИИ: Архитектура-(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++ введены синонимы для имен потоковых классов:
Имена синонимов в точности соответствуют именам потоковых классов в традиционной версии библиотеки ввода-вывода 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; Просмотров: 848; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |