Скачиваний:
189
Добавлен:
05.07.2021
Размер:
16.53 Mб
Скачать

7. Istream как псевдоним шаблона класса basic_istream. Взаимосвязь основных классов ввода/вывода. Ввод данных с помощью объекта cin

 Класс iostream является производным от классов basic_istream и basic_ostream одновременно и предоставляет методы ввода из потока и вывода в поток. Класс iostream представляет собой реализацию шаблонного класса basic_iostream, который управляет вставками через свой базовый класс basic_ostream и извлечениями из потока через свой базовый класс basic_istream. Оба класса basic_iostream и basic_ostream имеют общий базовый класс basic_ios, который наследуется виртуально.

Заголовок streambuf используется для определения шаблона класса basic_streambuf, предназначенного для получения буфера потока, который управляет передачей элементов в поток и из него.

Класс streambuf является производным от классов basic_ streambuf представляет собой специализацию класса basic_streambuf, которая использует char в качестве параметров шаблона. Класс streambuf является синонимом шаблона класса basic_streambuf, специализированного для элементов типа char с чертами символов по умолчанию.

Объект cin соответствует стандартному потоку ввода. По умолчанию этот поток ассоциируется со стандартным устройством ввода — обычно клавиатурой.

cout<< "Enter a number: "; //вывод приглашения на ввод числа

float num;

cin >> num;

8. Класс basic_ostream. Методы put(), write(), поля, перегруженные операторы, особенности использования. Оператор <<. istream и ostream как специализации для специализаций char. wistream и wostream как специализации для типа wchar_t.

 Класс basic_ostream находится в заголовочном файле<ostream> описывает объекты, управляющие вставкой элементов в буфер потока.

Помимо разнообразных функций operator<<, класс ostream предоставляет метод put() для отображения символов и метод write() для отображения строк. Метод put() имеет следующий прототип:

basic_ostream<Elem,Tr> & put(char_type _Ch);

Метод реализован в виде шаблона, чтобы был возможен вывод значений типа wchar_t. Его вызов выполняется с использованием обычной нотации методов класса:

cout.put('W'); //отображение символа W

Здесь cout — вызывающий объект, a put() — метод-элемент класса. Подобно функциям операции << эта функция возвращает ссылку на вызывающий объект, поэтому можно выполнить ее конкатенацию с выводом:

cout.put('I').put('t');//отображение строки It с помощью двух вызовов функции put()

Метод write() записывает целую строку

Первый аргумент write() представляет адрес строки, которую нужно отобразить, а второй аргумент указывает количество отображаемых символов. Использование cout для вызова write() вызывает специализацию char, поэтому возвращаемым типом будет ostream&. В примере ниже показано, как работает метод write().

Вдобавок метод write() не прекращает вывод строки по достижении нулевого ограничивающего символа. Он просто выводит указанное количество символов, даже если при этом выходит за пределы конкретной строки! Компиляторы могут по-разному размещать данные в памяти и по-разному выравнивать ее содержимое.

Метод write() можно также использовать с числовыми данными. В этом случае ему нужно передать адрес числа, приведя его тип к char*:

long val = 560031841;

cout.write ((char*) &val, sizeof (long));