Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000101.doc
Скачиваний:
8
Добавлен:
30.04.2022
Размер:
370.18 Кб
Скачать

Контрольные вопросы

  1. Что такое инкапсуляция?

  2. Как описываются классы?

  3. Каким образом создаются объекты?

  4. Какие существуют режимы доступа к членам классов?

  5. Для чего применяются конструкторы и деструкторы?

  6. Что подразумевается под наследованием для классов?

  7. Для чего нужны виртуальные классы и функции?

  8. Для чего используется указатель this?

11. Потоки ввода/вывода

11.1. Понятие потока

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

Потоком называется абстрактное понятие, относящееся к любому переносу данных от источника (или поставщика данных) к приемнику (или потребителю) данных. Когда речь идет о вводе символов от источника, используются также синонимы извлечение, прием и получение, и вставка, помещение или запоминание, когда речь идет о выводе символов в приемник. В качестве источников и приемников данных существуют классы для поддержки консольного вывода (constrea.h), буферов памяти (iostream.h), файлов (fstream.h) и строк (strstream.h).

11.2. Библиотека iostream

Библиотека iostream, определенная в файле «iostream.h» содержит два параллельных семейства классов: классы, которые являются производными (порожденными) от streambuf, и классы, производные от ios. Оба эти класса являются классами нижнего уровня, и каждый из них выполняет различный набор задач. Один из этих двух классов является базовым классом для всех классов потоков. Доступ из классов, базирующихся на ios, к классам, базирующимся на streambuf, осуществляется через указатель.

11.3. Класс streambuf

Класс streambuf обеспечивает интерфейс с физическим устройством. Он дает общие методы буферизации и обработки потоков при небольшом объеме или отсутствии форматирования. Streambuf – это полезный базовый класс, используемый другими частями библиотеки iostream, хотя можно создавать производные от него классы для собственных функций и библиотек. Классы conbuf, strstreambuf и filebuf являются производными от streambuf.

11.4. Класс ios

Класс ios и производные от него классы содержат указатель на streambuf. Он выполняет форматированный ввод/вывод с контролем ошибок, используя streambuf.

Программы Си++ начинают работу при четырех открытых предопределенных потоках, объявленных как объекты классов withassign, следующим образом:

extern istream_withassign cin; // Соответствует stdin

extern ostream_withassign cout; // Соответствует stdout

extern istream_withassign cerr; // Соответствует stderr

extern istream_withassign clog; // Буферизованный cerr

11.5. Потоковый вывод

Потоковый вывод осуществляется с помощью операции вставки (занесения) <<. Для операций вывода переопределяется стандартная операция сдвига влево <<. Ее левый операнд представляет собой объект типа ostream. Правый операнд может иметь любой тип, для которого определен вывод потоком. Например,

cout << «Hello!\n»;

записывает строку «Hello!» в cout – стандартный поток вывода, который обычно направлен на экран, после чего следует новая строка.

Операция << обладает ассоциативностью слева и возвращает ссылку на объект ostream, для которого она вызывалась. Это позволяет организовать каскадные вставки:

int i = 8;

double d = 2.34;

cout << «i= « << i << «, d= « << d << «\n»;

Это вызовет вывод: i = 8, d = 2.34 на стандартное устройство вывода.