Лабораторна работа № 7 стрийминг класове
Предаване на класове в C++.
Библиотеката на C ++ Streaming Class е изградена върху два основни класа: ios и streambuf .
Класът streambuf организира и свързва разпределените в паметта I/O буфери с физически I/O устройства. Обикновено програмистът не използва методите и данните от класа streambuf. Този клас е необходим на други класове на I/O библиотеката. Също така е на разположение на програмиста да създава нови класове въз основа на съществуващи.
Класът ios съдържа съоръжения за форматирани I/O и проверка на грешки.
istream - клас входни потоци;
ostream - клас изходни потоци;
iostream - I/O клас;
istrstream - клас на потоци от входни низове;
ifstream - клас потоци от входни файлове и т.н.
Класовете за поточно предаване, техните методи и данни стават достъпни в програмата, ако в нея е включен необходимият заглавен файл.
- за ios, ostream, istream.
- за strstream, istrstream, ostrstream
- за fstream, ifstream, ofstream
Основни I/O потоци.
За вход от потока се използват обекти от класа istream, за изход към потока - обекти от клас ostream.
Класът istream дефинира следните функции:
Не поддържа разделители и символите, прочетени в буфера, не се прекратяват с нула.
Разделителят се извлича от потока, но не се буферира. Това е основната функция за извличане на низове от поток. Прочетените символи се прекратяват с нула.
Копира данни от istream в streambuf, докато не срещне края на файла или разделителния знак, който не се извлича от istream. В s не се записва нулев знак.
istream get (char & С);
Чете символ от istream в C. При грешка C приема стойността 0XFF.
Извлича следващия символ от istream. Връща EOF, когато е намерен край на файла.
Връща следващия символ от istream, без да го извлича от istream.
Връща броя на символите, прочетени по време на последната неформатирана операция за въвеждане.
Ако има свободно пространство в областта за получаване на обекта streambuf, тогава символът C се поставя там.
Извлича символ от istream, докато не се случи следното:
функцията няма да извлича броя знаци;
Character целевият знак няма да бъде намерен;
края на файла не е достигнат.
Класът ostream определя следните функции:
Поставя знак C в ostream.
Записва съдържанието на буфера в ostream. Символите се копират, докато не възникне грешка или не се копират знаци за размер. Буферът се записва без форматиране. Обработката на нулеви символи не се различава от обработката на други. Тази функция прехвърля сурови данни (двоични или текстови) в ostream.
Изтрива буфера на streambuf.
За директен достъп се използват следните функции за настройка на позицията за четене и запис.
Задава указателя за получаване на поток (да не се бърка с функция) на отместване p от началото на потока.
Посочена е началната точка на движението.
Положителна p стойност премества указателя get напред (към края на потока), отрицателна p стойност премества указателя get назад (към началото на потока).
Връща текущата позиция на указателя за получаване.
Премества пут указателя в streambuf в позиция p от началото на streambuf буфера.
Показва началната точка.
Връща текущата позиция на пут указателя.
В допълнение към тези функции, операторът >> е претоварен в класа istream, а в класа ostream> имат два операнда. Лявият операнд е обект на класа istream (ostream), а десният е данните, чийто тип е посочен в езика.
За да се използва оператор> за всички стандартни типове данни, се използва подходящ брой оператор> претоварени функции. При извършване на I/O операции, в зависимост от вида на десния операнд, се извиква една или друга претоварена операторска функция.
Поддържат се следните типове данни: цяло число, реално, низове (char *). За изход - void * (всички указатели, различни от char *, автоматично се преобразуват в void *). Претоварването на оператора >> и> връща препратка към обекта на потока, посочен вляво от операционния знак. По този начин е възможно да се образуват "вериги" от операции.