Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по ООП.doc
Скачиваний:
31
Добавлен:
25.09.2019
Размер:
1.04 Mб
Скачать

34.Создание и организация взаимодействие потоков ввода-вывода.

Цель создания С++ была в том, чтобы пользователь мог определить новые типы данных, работа с которыми была бы столь же удобна и эффективна как и со встроенными типами. Таким образом, кажется разумным потребовать, чтобы средства ввода-вывода для С++ программировались с использованием возможностей С++, доступных каждому. Представленные здесь потоковые средства ввода-вывода появились в результате попытки удовлетворить этим требованиям.

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

Последующие разделы описывают основные части потоковой библиотеки С++:

10.2 Вывод: То, что для прикладной программы представляется выводом, на самом деле является преобразованием такихобъектовкак int,

char *, complex или Employee_record в последовательность символов. Описываются средства для записи объектов встроенных и пользовательских типов данных.

10.3 Ввод: Описаны функции для ввода символов, строк и значений встроенных и пользовательских типов данных.

10.4 Форматирование: Часто существуют определенные требования к виду вывода, например, int должно печататься десятичными цифрами, указатели в шестнадцатеричной записи, а вещественные числа должны бытьс явно заданной точностью фиксированного размера. Обсуждаются функции форматирования и определенные программистские приемы их создания, в частности, манипуляторы.

10.5 Файлы и потоки:Каждая программа на С++можетиспользоватьпо умолчанию три потока - стандартный вывод (cout), стандартный ввод

(cin) и стандартный поток ошибок (cerr). Чтобы работать с какими-либо устройствами или файлами надо создать потоки и привязать их к этим устройствам или файлам. Описывается механизм открытия и закрытия файлов и связывания файлов с потоками.

10.6 Ввод-вывод для С: обсуждается функция printf из файла <stdio.h> для С а также связь между библиотекой для С и <iostream.h> для С++.

Укажем, что существует много независимых реализаций потоковой библиотеки ввода-вывода и набор средств, описанных здесь, будет только подмножеством средств, имеющихся в вашей библиотеке.

37.Методы позиционирования потоков.

Классы istream и ostream содержат в себе методы позиционирования потока, которые в основном используются для файловых потоков.

Методы позиционирования потоков:

класс istream :

istream& seekg(long) - установка позиции от начала потока;

istream& seekg(long,seek_dir) - установка позиции потока, где

seek_dir может принимать значения:

ios::beg - установка от начала,

ios::cur - установка от текущей позиции,

ios::end - установка от конца потока,

long tellg() - возвращает позицию в потоке;

класс ostream :

istream& seekp(long) - установка позиции от начала потока;

istream& seekp(long,seek_dir) - установка позиции потока;

long tellp() - возвращает позицию в потоке.

Позиции в потоке отсчитываются от 0, как если бы файл был массивом из n символов:

char file[n-1];

и если fout присоединено к file, то

fout.seek(10);

fout<<'#';

поместит символ '#' в file[10].

Функции позиционирования работают одинаково в istream и в ostream. Различные окончания показывают, какая именно позиция (ввода или вывода) устанавливается. Это необходимо, поскольку в производном классе iostream от классов ostream и istream нужно отдельно следить за позициями ввода и вывода.