ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн
Потоковый ввод/вывод дисковых файлов
Большинству программ требуется сохранять данные на диске и считывать их.
Работа с дисковыми файлами подразумевает наличие еще одного набора специ-
альных классов: ifstream для ввода и ofstream для вывода. Класс fstream осуществ-
ляет и ввод, и вывод. Объекты этих классов могут быть ассоциированы с диско-
выми файлами, а их методы — использоваться для обмена данными с ними.
Вернемся к рис. 12.1. На нем видно, что класс ifstream является наследником
класса istream, ofstream — класса ostream, fstream — класса iostream. Эти родитель-
ские классы, в свою очередь, являются наследниками класса ios. Такая иерархия
вполне логична — классы, ориентированные на работу с файлами, могут ис-
пользовать методы более общих классов. К тому же файловые классы использу-
ют принцип множественного наследования, будучи наследниками еще и класса
fstreambase. Этот класс содержит объект класса filebuf, являющегося файловым
буфером, а также ассоциированные методы, унаследованные от более общего
класса streambuf. Обычно программисту не приходится заботиться об этих бу-
ферных классах.
Классы ifstream, ofstream и fstream объявлены в файле FSTREAM.
Программисты на C наверняка обратят внимание на то, что подход к диско-
вому вводу/выводу в C++ оказывается совсем иным. Старые функции языка С,
такие, как fread() и fwrite() в C++, конечно, работают, но они не так хорошо впи-
сываются в концепцию объектно-ориентированной среды программирования.
Новый подход, предлагаемый C++, гораздо прозрачнее и проще в использова-
нии. Кстати говоря, остерегайтесь случайного перемешивания старых функций
С с потоками C++. Они не всегда в хороших отношениях друг с другом, хотя
есть возможность заставить их жить дружно.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48