
- •Void unsetf( fmtflags флаги );
- •Iostream& manip_name (iostream& stream){
- •If (stream.Rdstate() & ios::eofbit)…
- •Istrea& putback( char ch );
- •Istream& get ( char& ch );
- •Istream& get (char* buf, streamsize num);
- •Istream& get (char* buf, streamsize num, char delim);
- •Istream& getline (char* buf, streamsize num);
- •Istream& getline (char* buf, streamsize num, char delim);
- •Int_type peek();
- •Istream& read(char* buf, streamsize num);
- •Istream& seekg( off_type offset, seekdir origin);
- •Istream& seekg( pos_type pos);
- •Istrstream::istrstream( const char* buf);
- •Istrstream::istrstream( const char* buf, streamsize size);
- •Int main(){
3.01
Система ввода - вывода С++
Предназначена для поддержки консоли и файлов.
С++ поддерживает две системы ввода-вывода:
С- систему для совместимости со старыми программами
объектно ориентированную систему ввода-вывода
Особенности ( системы объектно ориентированного ввода-вывода ):
соответствие принципам ООП ( средства работы с объектами )
дополнительные расширения
Библиотеки ОО ввода-вывода:
<iostream.h> - старая библиотека, разработанная для исходной спецификации С++
<iostream> - новая система ввода-вывода
Поток.
Поток - логическое устройство, получающее или передающее информацию.
Особенности:
поток связан с физическим устройством ввода - вывода
все потоки функционируют одинаково, хотя физические устройства, связанные с ними, могут быть различными
одна функция ввода-вывода может работать с разными типами физических устройств
Класс потоков.
В основе системы ввода-вывода лежат две иерархии шаблонных классов:
первая предназначена для поддержки низкоуровневого ввода-вывода ( в ее основе лежит класс basic_streambuf )
вторая предназначена для поддержки высокоуровневых операций ввода-вывода, проверки ошибок и анализа информации о статусе потоков ( в основе лежит класс basic_ios )
Иерархия класса потоков bacis_ios.
ios_base - определяет ряж базовых свойств
\/
basic_ios - высокоуровневый ввод-вывод
\/
basic_istream - поток ввода
\/ \/
\/ basic_ifstream - файловый поток ввода
\/
basic_ostream - поток вывода
\/ \/
\/ basic_ofstream - файловый поток вывода
\/
basic_iostream - поток ввода-вывода
\/
basic_fstream -файловый поток ввода-вывода
Специализация классов потоков.
В стандарте С++ создаются две специализации шаблонных классов:
char - для поддержки 8-битовых символов ( шаблонные классы streambuf, ios, istream, ostream, iostream )
wchar_t - для поддержки расширенных символов ( шаблонные классы wstreambuf, wios, wistream, wostream, wiostream )
Класс ios ( wios ) содержит большое число функций-членов и переменных, управляющих операциями над потоками.
Встроенные потоки.
cin ( win ) - стандартный ввод
cout ( wout ) - стандартный вывод
cerr ( werr ) - стандартный вывод ошибок
clog ( wlog ) - буферизированный вариант потока вывода ошибок cerr ( werr )
Эти потоки открываются при старте программы.
3.02
Форматированный ввод-вывод ( с использованием флагов форматирования ).
Операции форматирования при вводе-выводе позволяют задать визуальное представление объекта .
Способы форматирования:
путем обращения к членам класса ios
с использованием манипуляторов
Поток имеет набор флагов формата, которые управляют представлением информации.
Для ios ( реально в ios_base ) объявлена битовая маска fmtflags:
typedef T1 fmtflags;
static const fmtflags boolalpha, dec, fixes, hex, internal, left, oct, right, scientific, showbase, showpoint, showpos, skipws, unitbuf, uppercase, adjustfield, basefield, floatfield;
Описание флагов:
adjustfield ( left, right, internal ) - выравнивание по левому краю . по правому, по полю вывода
basefield ( oct, dec, hex ) - флаги основания системы счисления
boolalpha - флаг разрешения ввода булевых значений
floatfield ( scientific, fixed ) - формат вывода числа
showbase - флаг вывода основания системы счисления
showpos - вывод знака положительных чисел
showpoint - вывод точки и незначащих нулей
skipws - игнорирование разделительных симовлов при вводе данных из потока
uppercase - флаг вывода букв формата в заглавном виде ( 1.0Е5, 0X1F)
unifbuf - флаг очистки буфера после каждой операции вставки
Установка файлов формата.
Для установки используется функция:
fmtflags setf ( ftmflags флаги );
Особенности:
возвращает текущее состояние флагов формата ( до установки )
флаги - перечень существующих флагов для установки ( например ios_base::showpos)
при установке нескольких флагов используется операцию побитового ИЛИ "|"
применяется к конкретному потоку ( метод потока )
Сброс флагов формата.
Void unsetf( fmtflags флаги );
Особенности:
флаги - перечень существующих флагов для сброса, все сотальные сохряняют свое состояние
при сбросе нескольких флагов используется операция побитового ИЛИ
применяется к конкретному потоку
Перегруженная форма функции setf ().
fmtflags setf( fmtflags флаги1, fmtflags флаги2);
Особенности:
возвращает текущее состояние флагов формата ( до операции )
флаги 1 - перечень флагов для установки ( но будут установлены только такие флаги1, которые перечислены в списке флаги2)
флаги 2 - список флагов для сброса
Проверка флагов формата.
Для получения текущего состояния флагов формата без их установки- снятия используется функция
fmtflags flags();
Особенности:
применяется к конкретному потоку.
Установка всех флагов формата:
fmtflags flags ( fmtflags f);
Особенности:
возвращает текущее состояние флагов формата ( до операции )
f - битовый шаблон флагов формата
Функция width ()
Позволяет изменять ширину поля вывода.
streamsize width ( streamsize w );
Особенности:
ф-ция возвращает предыдущую ширину
w - новое значение ширины
если данные не циликом заполняют поле, то они дополняются символом заполнителем
если число не вмещается в поле, то выводится без усечения
3.03
Применение манипуляторов формата.
Манипуляторы- специальные функции, которые включаются в операторы ввода-вывода.
Особенности:
для доступа к манипуляторам необходимо подключить библиотеку < iomanip >
если манипулятор не имеет аргументо, то скобки после него не ставятся ( фактически выполняется не вызов функции, а передача адреса оператору ввода-вывода)
Стандартные манипуляторы:
hex, dec, oct
fixed, scientific
left, right, internal
boolalpha, noboolalpha
showbase, noshowbase
showpoint, noshowpoint
skipws, noskipws
uppercase, nouppercase
unitbuf, nounitbuf
setiosflags( fmtflags f ), resetiosflags( fmtflags f )
setbase ( int base )
setfill ( char c )
setprecision ( int p )
setw ( int w )
endl
ends
flush
ws
Пример использования стандартных манипуляторов:
#include <iostream>
using namespace std;
3.04
Создание манипуляторов.
Разрешено создание собственных манипуляторов.
Особенности:
различают манипуляторы ввода и вывода
обычно создают манипуляторы без параметров
возможность создания манипулятора с параметрами зависит от компилятора
позволяют собрать несколько операций ввода-вывода в одном месте
можно использовать для работы с перифирийными физ. устройствами через потоки ( например передача специальных команд принтеру )
Iostream& manip_name (iostream& stream){
// ...
return stream;
}
Особенности:
получает ссылку на поток ( при использовании этот аргумент не указывается )
возвращает ссылку на поток
создается для выполнения часто используемых операций
ostream& nr( ostream& stream){
stream << " **** " << endl;
return stream;
}
3.05
Перегрузка операторов вводы и вывода из потока.
Особенности:
оператор << - оператор вставки в поток
оператор >> - оператор извлечения
желательно чтобы полученные операторы были универсальными и работали сразными потоками
Перегрузка оператора >>
istream& operator<< ( istream& stream, class_name& obj);
Особенности:
не может быть членом класса
stream - ссфлка на поток ввода
obj - ссылка на объект пользовательского типа
возвращает ссылку на поток ввода для выполнения цепочек
для доступа к закрытым членам класса следует определять функцию как дружественную классу ( friend )
3.06
Пергрузка оператора <<
ostream& operator << (ostream& stream, class_name obj);
Особенности:
не может быть членом класса
stream - ссылка на поток ввода
obj - объект пользовательского типа
возвращает ссылку на поток для выполнения цепочек
для доступа к закрытым членам класса определять оператор как friend
3.07
Файловая система.
Предназначена для поддержки файлов.
Особенности:
файловая система - часть общей объекто-ориентированной системы ввода-вывода
соответствие принципам объектно-ориентированного программирования
дополнена особенностями поддержки файлов
Файлы.
Файл - физ. устройство с которым осуществляется всязь по обмуну данными.
Работа с файлами ведется с использованием потоков - абстрактное ( логическое ) устройство.
Файловый поток одновременно может быть связан только с одним файлом.
Все потоки в файловой системе одинаковы, а сами файлы мгут отличаться.
Принципы работы с файлом.
Чтобы работать с файлом вначале необходимо свящать его с некоторым потоком.
сначала задаем экземпляр файлового потока одного из типов ifstream, ofstream, fstream
для связи уже имеющегося потока и файла необходимо выполнить открытие файла
по окончанию оапботы с файлом необходимо разорвать связь с потоком, чтобы не осталось зависших данных, для этого используется закрытие файла.
Статус состояния ввыода - вывода.
Поток имеет набор флагов статуса состояния.
Для ios объявлена битовая маска iostate:
typedef T2 iostate;
static const iostate badbit, eofbit, failbit, goodbit;
goodbit - нормальное состояние ( не битовая маска )
eofbit - обнаружен конец файла
failbit - обнаружена исправимая ошибка
badbit - обнаружена критическая ошибка
Получение информации о статусе ввода-вывода
Первый сопсоб получения информации о статусе связан с функцией:
iostate rdstate();
Особенности:
Если ошибок не обнаружено, то возвращается значение goodbit;
При возникновении ошибок требуетсяя анализ битовых флагов ошибок: