- •Обзорные лекции по курсу
- •1.Потоки
- •1.1. Заголовочные файлы библиотеки потоков iostream
- •1.2. Классы и объекты потоков ввода-вывода
- •2.Вывод потоков
- •Int main()
- •3. Ввод потоков
- •Int X, у;
- •Int с;
- •Сохранение типов данных при вводе-выводе
- •4. Неформатированный ввод-вывод с использованием read, gcount и write
- •5. Манипуляторы потоков
- •Манипуляторы, определяемые пользователем
- •Упражнения для самопроверки
Карасев Н.И.
Методология объектно-ориентированного программирования
Обзорные лекции по курсу
Лекция 7. Потоковый Ввод-Вывод в языке С++
В языке С++ предусмотрены средства сохранения типов данных при вводе-выводе. Каждая операция ввода-вывода осуществляется способом, чувствительным к типу данных. Если для какого-то типа данных должным образом была определена функция ввода-вывода, то именно она автоматически вызывается для обработки этого типа данных. Если нет соответствия между типом реальных данных и функцией обработки этого типа данных, то компилятор обнаружит ошибку. Таким образом, несоответствующие данные не могут проникнуть в систему (как может случиться в С, в котором есть лазейки, приводящие к возникновению неуловимых и странных ошибок).
Пользователи могут задавать ввод-вывод типов, определяемых пользователем, так же, как и стандартных типов. Такая расширяемость является самым ценным свойством языка С++.
Используйте неформатированный ввод-вывод для достижения максимальной эффективности при обработке файлов большого объема.
Содержание лекции:
1.Потоки
2. Вывод потоков
3. Ввод потоков
4. Неформатированный ввод - вывод
5. Манипуляторы потоков
6.Резюме
7. Упражнения для самопроверки
1. Потоки
В понятийном аппарате языка С++ Поток — это последовательность байтов. В операциях ввода байты пересылаются от устройства (например, от клавиатуры, дисковода или соединения сети) в оперативную память. При выводе байты пересылаются из оперативной памяти на устройства (например, на экран монитора, принтер, дисковод или в соединение сети).
Приложение связывает значение элемента данных с байтами данных. Байты данных могут представляться в виде символов в коде ASCII, в виде внутреннего формата сырых данных, в виде графического изображения, оцифрованной речи, цифрового видеоизображения или в виде любой другой информации, которая может потребоваться приложению.
Механизм ввода-вывода заключается в пересылке байтов данных от устройств в оперативную память и обратно эффективным и надежным способом. Такая пересылка часто включает механические перемещения, например, вращение диска и ленты или нажатие клавиш клавиатуры. Время, затрачиваемое на такие перемещения, обычно значительно превышает время, в течение которого процессор обрабатывает данные. Таким образом, операции ввода-вывода требуют тщательного планирования для достижении максимальной эффективности
Язык С++ предоставляет возможности для ввода-вывода как на «низком», так и на «высоком» уровнях. Ввод-вывод на низком уровне – это неформатированный ввод-вывод обычно сводится к тому, что некоторое число байтов данных просто следует переслать от устройства в память или из памяти в устройство. При такой пересылке каждый байт является самостоятельным элементом данных. Передача на низком уровне позволяет осуществлять пересылку больших по объему потоков ввода-вывода с высокой скоростью, но такая передача обычно неудобна для программиста.
Программисты предпочитают использовать операции ввода-вывода на высоком уровне, т.е. форматированный ввод-вывод, при котором байты группируются в такие элементы данных, как, например, целые числа, числа с плавающей запятой, символы, строки, а также данные типов, определенных пользователем. Такие ориентированные на типы возможности более удобны для большинства операций ввода-вывода, кроме обработки файлов очень большого объема.