. Классы потоков

Iostream – библиотека шаблонов, при работе необходимо подключать usingnamespacestd. 2 иерархии классов iostream: Низкий уровень: streambuf – базовые операции вв\выв, непосредственно не используется. Вторая иерархия начинается с ios – поддержка форматированного вв\выв. От него порождены классы: istream, ostream, iostream. Эти классы используются для создания потоков, способных осуществить ввод и вывод и ввод\вывод соответственно. Ios содержит много функций-членов и переменных, которые управляют фундаментальными операциями с потоками. Если использовать системный вв\выв обычным образом, то члены класса ios доступны для использования любым потоком.

 

Вопрос 35. Создание собственных операторов вставки и извлечения

Создание операторов вставки. Общая форма: ostream &operator<<(osream &поток, тип_класса объект) { //характерный для типа код; return поток;} Необходимо возвращать поток. Обычно используют в качестве параметра «объект» ссылку, а не сам объект. Преимущества: быстрота, без деструктора. Ф-ия вставки не член класса и не может им быть. Перегруженный оператор не может быть ф-ией-членом. Для доступа к защищенным и частным – friend.
Перегрузка операторов извлечения. Общая форма: istream &operator>> (istream &поток, тип_класса &obj) {}.

 

Вопрос 36. Форматирование ввода\вывода

С помощью ф-ий членов класса ios. Флаги форматирования: enum{…}. Значения используются для установки\сброса флагов, управляют формой потока. Установка: setf(): longsetf( longflags); Возвращает предыдущее значение флага, устанавливает новое(аргумент). Остальные флаги не изменяются. Пример: streamsetf(ios::showbase); Для отключения флагов: unsetf(); Узнать текущую установку флагов: flags(). Можно установить ширину поля потока, символ для заполнения и число цифр после запятой. (int width(int len); char fill (char ch); int precision(int num); ). Использование манипуляторов. Чтобы использовать манипуляторы с параметрами – подключить iomanip.

ec – вв\выв данных в 10-чной форме; endl – вывод символа новой строки с передачей в поток  всех данных из буфера; ends – вывод нулевого символа; flush – передача в поток содержимого буфера; hex – вв\выв данных в 16-ричной форме; oct – в 8-ричной форме; resetiosflags( long f) – сбрасывает флаги; setbase( int base) – устанавливает базу счисления равной.

 

Вопрос 37. Файловый ввод\вывод

Надо включить <fstream.h>. Открытие и закрытие файлов. Открытие = состыковка с потоком. Поток ввода – как объект класса ifstream, вывод – ofstream, вв\выв – fstreram. Open() – ф-ия, которая ассоциирует поток с файлами.  Пример. ( voidchar *filename, intmode, intaccess=filebuf::openport); filename – имя файла(указание пути), mode – способы открытия: 1.ios::app – данные добавляются в конец файла 2. ios::ate – ввод из файла, не надо, если ifstream\ofstream. 3. ios::binary – открывает для двоичных операций. 4. ios::in 5. ios::nocreate – открывает только существующий файл. 6. ios::noreplace – не позволяет заменяить файл, если есть ios::app, ios::ate 7. ios::out 8. ios::trunk – уничтожение содержимого, размер усекается до 0. Access определяет доступ к файлу. Если open() не открывает поток, то он = NULL. Все классы содержат конструкторы. Открытие файла: ifstreammystream (“myfile”). Закрытие файла. Close(), mystream.close(). Определение конца файла. Функция-член eof(); inteof(); При достижении конца фала возвращает не 0! При использовании оператора >> для чтения файлов надо иметь ввиду, что происходит определённое  преобразование символов. Для предотвращения ошибок рекомендуется пользоваться функцией getline().

Ошибки потоков. В базовом классе ios определено поле, которое представляет состояние потока в виде совокупности битов.

enumio_state{ goodbit=0x00;//нет ошибки eofbit=0x01; //конец файла

failbit=0x02; //ошибка форматирования или преобразования

badbit=0x04; //серьезная ошибка, пользоваться потоком невозможно

harfail=0x08; //ошибка оборудования };

intrdstate(); возвращает текущее состояние потока.

 

Вопрос 38.Чтение и запись в текстовые файлы

См. вопрос 37.


Ссылка на основную публикацию
Adblock detector