АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Классы istream, ostream, iostream и _withassign. Предопределенные потоковые объекты. Флаги статуса ошибок потоков, функции для флагов ошибок

Читайте также:
  1. Biglnteger Классы
  2. II. Основные задачи и функции
  3. III. Предмет, метод и функции философии.
  4. Object классы
  5. XVIII. ПРОЦЕДУРЫ И ФУНКЦИИ
  6. А) ПЕРЕДАЧА НА РУССКОМ ЯЗЫКЕ ФУНКЦИИ АРТИКЛЯ
  7. А. Средняя квадратическая погрешность функции измеренных величин.
  8. Абстрактные классы и чистые виртуальные функции. Виртуальные деструкторы. Дружественные функции. Дружественные классы.
  9. Адаптивные функции
  10. Администраторы судов, их функции
  11. Алгебраическое интерполирование функции.
  12. Анализ функции логики высказываний

Класс istream

Класс istream, наследник класса ios, выполняет специфические действия по вводу
данных — извлечение. Очень легко спутать извлечение и связанное с ним дейст-
вие по выводу данных — вставку. Рисунок 12.2 показывает разницу.
В табл. 12.6 собраны функции istream, которые вам могут пригодиться.

Таблица 12.6. Функции istream

Функция Назначение
>> Форматированное извлечение данных всех основных (и перегружаемых) типов из потока
get(ch) Извлекает один символ в ch
get(str) Извлекает символы в массив str до ограничителя '\n'
get(str, MAX) Извлекает до MAX числа символов в массив
get(str, DELIM) Извлекает символы в массив str до указанного ограничителя (обычно '\n'). Оставляет ограничитель в потоке
get(str, MAX, DELIM) Извлекает в массив str до MAX символов или до символа DELIM. Оставляет ограничитель в потоке
getline(str, MAX, DELIM) Извлекает в массив str до MAX символов или символа DELIM. Извлекает ограничитель из потока
putback(ch) Вставляет последний прочитанный символ обратно во входной поток
ignore(MAX, DELIM) Извлекает и удаляет до MAX числа символов до ограничителя включительно (обычно '\n'). С извлеченными данными ничего не делает
peek(ch) Читает один символ, оставляя его в потоке
count=gcount() Возвращает число символов, прочитанных только что встретившимися вызовами get(), getline() или read()
read(str, MAX) (Для файлов.) Извлекает вплоть до MAX числа символов в массив str
seekg() Устанавливает расстояние (в байтах) от начала файла до файлового указателя
seekg(pos,seek_dir) Устанавливает расстояние (в байтах) от указанной позиции в файле до указателя файла. seek_dir может принимать значения ios::beg, ios::cur, ios::end
pos=tellg(pos) Возвращает позицию (в байтах) указателя файла от начала файла

 

Дисковый файл

Рис. 12.2. Файловый ввод/вывод

Там уже встречались некоторые из этих функций, например get(). Большинство из них рассчитаны на работу с объектом cin, обычно представляющим собой поток данных, вводимых с клавиатуры. А последние четыре функции предназначены только для работы с дисковыми файлами.

Класс ostream

Класс ostream предназначен для вывода (вставки в поток) данных. Таблица 12.7 содержит наиболее общие методы этого класса. Как и в предыдущем случае, последние четыре функции работают только с файлами.

Таблица 12.7. Функции ostream  
Функция Назначение
<< Форматированная вставка данных любых стандартных (и перегруженных) типов
put(ch) Вставка символа ch в поток
flush() Очистка буфера и вставка разделителя строк
write(str, SIZE) Вставка SIZE символов из массива str в файл
seekp(position) Устанавливает позицию в байтах файлового указателя относительно начала файла
seekp(position, seek_dir) Устанавливает позицию в байтах файлового указателя относительно указанного места в файле, seek dir может принимать значения ios::beg, ios::cur, ios::end
pos=tellp() Возвращает позицию указателя файла в байтах

Классы iostream и _withassign

Класс iostream является порожденным по отношению к istream и ostream. Его
единственное предназначение — выступать в качестве базового класса для дру-
гих специфических классов вида iostream_withassign. У него нет собственных ме-
тодов, кроме конструктора и деструктора. Его порожденные классы могут осу-
ществлять как ввод, так и вывод данных.

Существуют три класса вида _withassign:

istream_withassign — наследник istream;

ostream_withassign — наследник ostream;

iostream_withassign — наследник iostream.

Эти классы очень похожи на своих предков. Разница лишь в том, что в них,
в отличие от породивших их классов, имеются перегружаемые операции при-
сваивания, благодаря чему их объекты могут быть скопированы.

Для чего нужны потоковые классы с возможностью копирования и без тако-
вой? Вообще-то, это не самая лучшая идея — копировать объекты потоковых
классов. Причина заключается в том, что каждый такой объект ассоциирован
с конкретным объектом streambuf, включающим в себя область памяти для хра-
нения данных объекта. Если вместе с потоковым объектом копировать объект
streambuf, возникнет некая неразбериха. Тем не менее бывают случаи, когда важ-
но иметь возможность копировать потоки.

Соответственно, классы istream, ostream и iostream созданы так, что их объек-
ты нельзя копировать — операторы присваивания и конструкторы копирования
сделаны скрытыми. А их наследники с хвостиком _withassign имеют возмож-
ность копирования своих объектов.

Предопределенные потоковые объекты

В этой книге уже приводились примеры использования двух предопределенных
потоковых объектов, порожденных классами вида _withassign: cin и cout. Обычно они связаны с клавиатурой и монитором соответственно. Еще двумя предопреде-
ленными объектами являются cerr и clog:

cin, объект istream_withassign, используется для операций ввода с клавиатуры;

cout, объект ostream_withassign, используется для операций вывода на эк-
ран монитора;

cerr, объект ostream_withassign, используется для сообщений об ошибках;

clog, объект ostream_withassign, используется для ведения журнала.
Объект cerr часто используется для сообщений об ошибках и программной

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

Ошибки потоков

До сих пор в нашей книге мы использовали довольно прямолинейный подход к
вводу/выводу, используя выражения вида:


cout << "Доброе утро, страна!";
и

cin >> var;

 

Такой подход, как вы могли заметить, предполагает, что во время процесса
ввода/вывода ничего нехорошего не случится. К сожалению, не всегда все прохо-
дит гладко, особенно в отношении ввода. Что будет, если наш дорогой пользова-
тель введет строчку «девять» вместо числа 9, что будет, если он нажмет Enter,
ничего не введя? А что случится, если произойдет скачок напряжения в элек-
трической сети или просто возникнут какие-то неполадки с техникой? В про-
цессе изучения этой темы мы коснемся всех этих проблем. Множество приемов,
которые мы изучим, применимы и к файловому вводу/выводу.

Биты статуса ошибки

Флаги статуса ошибок потоков определяют компонент ios enum, который сообщает
об ошибках, произошедших в операциях ввода/вывода. Все эти флаги собраны в
табл. 12.8. Рисунок 12.3 показывает, как они выглядят. Для чтения (и даже установ-
ки) флагов могут использоваться различные функции ios, как показано в табл. 12.9.

Таблица 12.8. Флаги статуса ошибок

Название Значение  
goodbit Ошибок нет (флаги не установлены, значение =0)  
eofbit Достигнут конец файла  
failbit Операция не выполнена (пользовательская ошибка, преждевременный EOF)
badbit Недопустимая операция (нет ассоциированного streambuf)
hardfail Неисправимая ошибка

Таблица 12.9. Функции для флагов ошибок

Функция Назначение
int=eof(); Возвращает true, если установлен флаг EOF
int=fail(); Возвращает true, если установлены флаги failbit, badbit или hardfail
int=bad(); Возвращает true, если установлены флаги badbit или hardfail
int=good(); Возвращает true, если ошибки не было
clear(int=0); При использовании без аргумента снимает все флаги ошибок, в противном случае устанавливает указанный флаг, например clear(ios::failbit)

Рис. 12.3. Флаги состояния потока

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)