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

Потоковые классы. Иерархия потоковых классов

Читайте также:
  1. Абстрактные классы и чистые виртуальные функции. Виртуальные деструкторы. Дружественные функции. Дружественные классы.
  2. Глава III. Психологическая иерархия рас
  3. Иерархия (соподчиненность) и взаимодействие желез внутренней секреции
  4. Иерархия в организации и ее звенность
  5. Иерархия в организации и её звенность
  6. Иерархия вызовов в программе пользователя
  7. Иерархия долгосрочных рейтингов агентства Moody's для облигаций, номинированных в иностранной валюте (март 1998 г.)
  8. Иерархия классов
  9. Иерархия менеджмента — это служебная лестница, ряд должностей, последовательность подчинения в порядке перехода от нижних уровней к высшим и наоборот.
  10. Иерархия народов
  11. Иерархия потребностей
  12. Иерархия потребностей по А. Маслоу

Поток — это общее название, как ни странно, потока данных. В C++ поток представляет собой объект некоторого класса. Именно поэтому вы могли встретить потоковые объекты cin и cout. Разные потоки предназначены для представления разных видов данных. Например, класс ifstream олицетворяет собой поток данных от входного дискового файла.

Программисты на C могут удивиться, какие же преимущества дает использование потоковых классов для ввода/вывода вместо традиционных функций C printf(),scanf(), для файлов — fprintf(), fscanf()...

Одним из аргументов в пользу потоков является простота использования. Если вам приходилось когда-нибудь использовать символ управления форматом %d при форматировании вывода с помощью %f в printf(), вы оцените это.Ничего подобного в потоках вы не встретите, ибо каждый объект сам знает, как он должен выглядеть на экране. Это избавляет программиста от одного из ос-
новных источников ошибок

Другой причиной является то, что можно перегружать стандартные операторы и функции вставки (<<) и извлечения (>>) для работы с создаваемыми классами. Это позволяет работать с собственными классами как со стандартными типами, что, опять же, делает программирование проще и избавляет от множества ошибок, не говоря уж об эстетическом удовлетворении.

Но неужели потоковый ввод/вывод так важен при работе в среде с графическим интерфейсом пользователя, такой, как, например, Windows, где непосредственный вывод текста на экран не используется вообще? Неужели в наше время еще нужны потоки C++? Оказывается, да, нужны. Потому что это лучший способ записывать данные в файл, лучший способ организации данных в памяти для последующего использования при вводе/выводе текста в окошках

Иерархия потоковых классов

Потоковые классы имеют довольно сложную иерархическую структуру. На рис. показана организация важнейших из них

Мы уже встречались с использованием некоторых потоковых классов. Операция извлечения >> является методом класса istream, операция вставки << —методом класса ostream. Оба этих класса являются наследниками ios. Объект cout, представляющий собой стандартный выходной поток, который обычно выводит на экран данные, является предопределенным объектом класса ostream_
withassign, являющегося наследником класса ostream. Аналогично, cin — объект istream_withassign, наследника istream.

 

 

На рис. видно, что класс ios является базовым для всей иерархии. Он содержит множество констант и методов, общих для операций ввода/вывода любых видов. Некоторые из них, такие, как флаги форматирования showpoint и fixed, мы уже встречали. В классе ios есть также указатель на класс streambuf, значением которого является адрес текущего буфера памяти. С помощью буфера производится обмен данными (запись или чтение). Кроме того, ios содержит некоторые низкоуровневые программы для обработки этих данных. В обычной ситуации вам не нужно заботиться о классе streambuf, обращение к которому из других классов происходит автоматически.

Классы istream и ostream являются наследниками ios и предназначены для ввода и вывода соответственно. Класс istream содержит такие функции, как get(), getline(), read() и перегружаемую операцию извлечения (>>), тогда как класс ostream содержит функции put(), write() и перегружаемую операцию вставки (<<). Класс iostream — наследник одновременно классов istream и ostream. Его производные классы могут использоваться при работе с такими объектами, как дисковые файлы, которые могут быть открыты одновременно для записи и чтения. Три класса — istream_withassign, ostream_withassign и iostream_withassign — являются наследниками istream, ostream и iostream
соответственно. Они добавляют к этим классам операторы присваивания.

 


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.003 сек.)