- •Е.А. Ганцева
- •Учебное пособие
- •Оглавление
- •Введение
- •Контрольные вопросы
- •2. Операции и основные типы данных
- •2.1. Операции
- •2.2. Указатели и массивы
- •2.3. Символы и строки символов
- •Контрольные вопросы
- •3. Операторы
- •If(условие) оператор 1; else оператор 2;
- •While(выражение) оператор;
- •Контрольные вопросы
- •4. Сложные типы данных
- •4.1. Составные деклараторы
- •4.2. Перечисления
- •4.3. Структуры
- •4.4. Объединения
- •4.5. Объявление tyрedef
- •4.6. Битовые поля
- •Контрольные вопросы
- •5. Функции
- •Контрольные вопросы
- •6. Организация ВводА/выводА
- •6.1. Ввод/вывод потоком
- •6.2. Функции ввода/вывода нижнего уровня
- •6.3. Функции ввода/вывода с консоли и порта
- •Контрольные вопросы
- •7. Директивы препроцессора
- •#Undef идентификатор
- •Контрольные вопросы
- •8. Видимость и время жизни переменных
- •Контрольные вопросы
- •9.1. Описание локальных переменных
- •9.2. Функциональная запись преобразования типов
- •9.3. Перегрузка функций
- •9.4. Перегрузка операторов
- •9.5. Модификаторы const и volatile
- •9.6. Доступ к глобальным переменным
- •Контрольные вопросы
- •10. Объектно–ориентированное программирование
- •10.1. Инкапсуляция
- •10.2. Классы и объекты
- •10.3. Друзья класса
- •10.4. Перегрузка операторов для классов
- •10.5. Конструкторы и деструкторы
- •10.6. Указатель this
- •10.7. Наследование
- •10.8. Доступность членов в иерархии классов
- •10.9. Виртуальные базовые классы
- •10.10. Виртуальные функции
- •Контрольные вопросы
- •11. Потоки ввода/вывода
- •11.1. Понятие потока
- •11.2. Библиотека iostream
- •11.3. Класс streambuf
- •11.4. Класс ios
- •11.5. Потоковый вывод
- •11.6. Встроенные типы
- •11.7. Манипуляторы
- •11.8. Потоковый ввод
- •11.9. Ввод типов, определенных пользователем
- •11.10. Простой ввод/вывод в файл
- •11.11. Обработка строкового потока
- •11.12. Потоки вывода на экран
- •Контрольные вопросы
- •Список использованных источников
Контрольные вопросы
Что такое инкапсуляция?
Как описываются классы?
Каким образом создаются объекты?
Какие существуют режимы доступа к членам классов?
Для чего применяются конструкторы и деструкторы?
Что подразумевается под наследованием для классов?
Для чего нужны виртуальные классы и функции?
Для чего используется указатель 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 на стандартное устройство вывода.