Потоковая библиотека ввода-вывода
? Класс istream (input stream — поток ввода) обеспечивает операции ввода.
? Класс ostream (output stream — поток вывода) обеспечивает операции вывода.
562 |
Глава 18. Ввод-вывод и файлы |
? Объект с^ класса istream читает данные со стандартного устройства ввода. ? Объект сои! класса ostream записывает данные на стандартное устройство вывода. ? Объект сегг класса ostream записывает данные на стандартное устройство сообщений об ошибке. Объект сегг, как правило, используется для сообщений об ошибках в программе. ? Операция извлечения > > используется для чтения данных, передаваемых в объект класса istгeam. Она извлекает данные из потокового объекта, стоящего слева, и присваивает эти данные переменной, стоящей справа. ? Операция вставки < < используется для записи данных, передаваемых в объект класса ostгeam. Она копирует содержимое переменной, стоящей справа, в объект, содержащийся слева. Концептуально ни вид устройства, ни специфика набора символов не влияет на выполнение операций ввода-вывода. В частности, операцию > > можно использовать для чтения данных независимо от того, осуществляется ли чтение с консоли, из файла на диске или из строки в оперативной памяти. Кроме того, применение операции не зависит от типа читаемых символов.Классы ввода-вывода определены в трех отдельных заголовочных файлах библиотеки: в iostream.li определены классы для чтения и записи данных на стандартные устройства, в fstream.li определены классы для чтения и записи данных в именованный файл, а в sstream.li определены классы для чтения и записи данных в строку, расположенную в оперативной памяти. Каждый из классов, перечисленных в заголовочных файлах fstream и sstream, является наследником соответствующего класса, указанного в заголовочном файле iostream. Список классов ввода-вывода содержится в табл. 18.5. |
Таблица 18.5. Заголовки и классы библиотеки ввода-вывода |
Объектно-ориентированный ввод-вывод в языке C++ |
563 |
Отношения наследования между потоковыми классами позволяют сделать следующие выводы. Каждая программа, в которой объекты класса istream применялись для чтения со стандартного устройства, может быть переписана для чтения данных из файла (при помощи класса ifstream) или строки (при помощи класса istringstream). Аналогично, в программах для вывода данных можно использовать классы ofstream или ostringstream вместо класса ОБ'Ьгеат. Класс ^Б'Ьгеат является наследником классов istream и ОБ'Ьгеат. Это значит, что объект класса ^Б'Ъгеат владеет операциями обоих родительских классов. Иначе говоря, объект класса ^Б'Ъгеат можно использовать как для ввода, так и для вывода данных в тот же поток. В библиотеке определены также еще два наследника от класса ^Б'Ъгеат — классы fБtream и БtringБtream. Эти классы предназначены для чтения и записи данных в файл или строку. Как известно, функция, обрабатывающая указатели на объекты базового класса, может работать с объектами производного класса. Отсюда следует, что функция с параметром типа iБtream& может быть вызвана для объектов класса ifБtream или iБtringБtream. Аналогично, функция с параметром типа ОБ'Ъгеат& может быть вызвана для объектов класса ofБtream или ОБ'Ъ|^п§Б'Ьгеат. Так как классы ввода-вывода связаны наследованием, можно написать одну функцию и применять ее ко всем трем видам потоков: стандартному, файловому или строковому потоку. |