Скачиваний:
62
Добавлен:
05.07.2021
Размер:
94.13 Кб
Скачать

Перегруженная операция вставки

Операция вывода в поток (<<) может быть использована как операция побитового сдвига влево. Но класс ostream перегружает операцию вывода в поток. В этой ипостаси этот оператор называется оператором вставки. Роль операции << определяется исходя из контекста. Операция вставки перегружена в классе ostream для всех базовых типов языка.

Все реализации операции вставки имеют тип возвращаемого значения ostream&. Это ссылка на тот же объект, который использован для вызова операции. Данный возвращаемый тип позволяет выполнять конкатенацию вывода.

Метод put() из класса basic_ostream предназначен для вывода одиночного символа в поток.

Метод write() записывает целую строчку в поток вывода, получая адрес строки и количество отображаемых символов. Метод write() не прекращает вывод строки при достижении символа конца строки, даже если при выводе произойдёт выход за границы.

7 апр 2021

Лекция 9

Поскольку буфер класса ostream управляется объектом cout вывод не отправляется по назначению немедленно. Вместо этого он накапливается в буфере до тех пор пока не заполнит его. Затем буфер очищается, отправляя его содержимое по назначению. Чаще размер буфера равен 512 байт или кратен этому числу

Операции вставки ostream преобразуют значеиня в текстовую форму.

  • Значения типа char, если это печатный символ, то выражается как символ в поле шириной 1.

  • Целочисленные типа отображаются как десятичные целые числа в поле с шириной, достаточной для отображения и числа, и знача, если таковой имеется.

  • Строки отображаются в поле шириной, равной длине строки

Класс ios_base хранит информацию, описывающую состояние формата. Определенные биты в одном элементе определяют например ширину поля, выравнивание...

По умолчанию объект cout заполняет неиспользуемые части выводдимого поля пробелами. При использовании функции fill можно задать собственный символ-заполнитель, который будет действовать до тех пор, пока явно не будет изменен.

Функция set_f и unset_f предназначены для установки и снятия флага, при этом могут быть получены ранее установленные флаги.

Т.к. язык С++ является ОО, то кроме функций установки флагов были разработаны отдельные манипуляторы, позволяющие выполнять те же задачи.

Ввод с помощью cin

Объект cin представляет собой обычный поток ввода байт. В классе iostream перегружены операции получения потока для всех базовых типов.

Объекты cin cout сщдержат элементы данных, описывающие состояние потока, который определяется типом ios_state, состоящим из 4 элементов:

Badbit

Eofbit

Failbit

Goodbit

Каждый элемент – это отдельный бит, который может быть установлен или сброшен. Когда операция ввода объекта cin достигает конца файла, флаг eofbit устанавливается 1. Если операция ввода для объекта не может прочитать полученный символ, failbit устанавливается 1. Badbit устанавливается 1, когда происходит сбой, не поддающийся диагностике и не позволяющий дальше работать с потоками ввода. Но если же три этих бита установлены 0, то goodbit устанавливается 1.