|
|
Широко известна трудность задачи проектирования и реализации
стандартных средств ввода-вывода для языков программирования.
Традиционно средства ввода-вывода были рассчитаны исключительно на
небольшое число встроенных типов данных. Однако, в нетривиальных
программах на С++ есть много пользовательских типов данных, поэтому
необходимо предоставить
возможность ввода-вывода значений таких типов. Очевидно, что средства
ввода-вывода должны быть простыми, удобными, надежными в использовании
и, что важнее всего, адекватными. Пока никто не нашел решения, которое
удовлетворило бы всех; поэтому необходимо дать возможность пользователю
создавать иные средства ввода-вывода, а также расширять стандартные
средства ввода-вывода в расчете на определенное применение.
Цель создания С++ была в том, чтобы пользователь мог определить новые
типы данных, работа с которыми была бы столь же удобна и эффективна как
и со встроенными типами. Таким образом, кажется разумным потребовать,
чтобы средства ввода-вывода для С++ программировались с использованием
возможностей С++, доступных каждому. Представленные здесь потоковые
средства ввода-вывода появились в результате попытки удовлетворить
этим требованиям.
Основная задача потоковых средств ввода-вывода - это процесс
преобразования объектов определенного типа в последовательность символов
и наоборот. Существуют и другие схемы ввода-вывода, но указанная является
основной, и если считать символ просто набором битов, игнорируя его
естественную связь с алфавитом, то многие схемы двоичного ввода-вывода
можно свести к ней. Поэтому программистская суть задачи сводится к
описанию связи между объектом определенного типа и бестиповой (что
существенно) строкой.
Последующие разделы описывают основные части потоковой библиотеки С++:
Укажем, что существует много независимых реализаций
потоковой библиотеки ввода-вывода и набор средств, описанных здесь, будет
только подмножеством средств, имеющихся в вашей библиотеке. Говорят,
что внутри любой большой программы есть маленькая программа, которая
стремится вырваться наружу. В этой главе предпринята попытка описать
как раз маленькую потоковую библиотеку ввода-вывода, которая позволит
оценить основные концепции потокового ввода-вывода и познакомить
с наиболее полезными средствами. Используя только средства,
описанные здесь, можно написать много программ; если возникнет
необходимость в более сложных средствах, обратитесь за деталями к вашему
руководству по С++. Заголовочный файл <iostream.h> определяет интерфейс
потоковой библиотеки. В ранних версиях потоковой библиотеки использовался
файл <stream.h>. Если существуют оба файла, <iostream.h> определяет полный
набор средств, а <stream.h> определяет подмножество, которое
совместимо с ранними, менее богатыми потоковыми библиотеками.
Естественно, для пользования потоковой библиотекой вовсе не нужно
знание техники ее реализации, тем более, что техника может быть
различной для различных реализаций. Однако, реализация ввода-вывода
является задачей, диктующей определенные условия, значит приемы, найденные
в процессе ее решения, можно применить и для других задач, а само это
решение достойно изучения.
| |