|
Программирование >> Аргументация конструирования
объект - справа. Во-втор1х, оператор сдвига влево имеет очень низкий приоритет. Благодаря этому выражения с ним работают так, как ожидается. . #include <i03tream.h> void fnfint a, int b) cout a + b a+ b \n cperator+- имеет более высокий приоритет, . ;V : чем operator<< i Следовательно, данное выражение интерпретируется как . . cout а + Ь (а + Ь) \п ; а не как cout ( а + Ь а) + (Ь . \п ); . В-третьих, оператор сдвига влево вычисляется слева направо, что позволяет записывать длинные выражения вывода. Так, приведенное выше выражение интерпретируется следующим образом: #include <iostream.h> voi (int a, int b) f .. ...... ((cout a + b ) a + b) \n ;- . . ) . . Ho, на мой взгляд, настоящая причина кроется в том, что оператор сдвига здорово смотрится. Символы << выглядят так, как будто что-то выводится из программы, \ а - как будто что-то вносится в нее. И наконец, пуркуа бы и не.па ?.. А что же тако еат? Объект класса ream содержит члены, необходимые ддя управления потоком ввода-вывода. А istream соответственно описывает поток ввода. В С эгому эквивалентна структура FITE, определенная в stdio.h. Функция f open О открывает файл ддя ввода и вывода и возвращает указатель на объект типа FILE, в котором хранится информация, необходимая для осуществления операций ввода-вывода. Этот объект используется при вызове функций f.. {), таких как fpri.itf ; , f scanf () и f gets (). В составе библиотеки потоков ввода-вывода определено еше несколько подклассов ostream и istream, которые используются для ввода и вывода в файлы и внутренние буферы. ЗнаколшШо с подклассами ptmea Подклассы ofstream, ifstream и fstream объявлены в заголовочном файле fstream. л и обеспечивают потоки ввода-вывода в дисковые файлы. Эти три класса предоставляют множество функций для управления вводом и выводом, многие из ко-тор1х наследуются от ostream и istream. Полный список этих функций вы можете найти в документации к компилятору, а здесь я приведу только несколько из них, чтобы вы могли с чего-то начать. Класс ofstream, который используется для файлового вывода, имеет несколько конструкторов; наиболее часто применяется следующий: ofstream;:ofstream(char* pFileName, int mode = ios::out, int prot = filetouff::openprot); Первый аргумент этого конструктора - указатель на имя открываемого файла. Второй и третий аргументы определяют, как именно должен быть открыт файл. Корректные значения аргумента mode приведены в табл. 26.2, a prot - в табл. 26.3. Эти значения являются битовыми полями, к которым применяется оператор OR (классы ios ebuff- родительские по отношению к ostream).
Приведенная ниже программа открывает файл а затем записывает в него некоторую важную информацию. finclude <fstream.h> void fn() / / Откроем текстов1й файл MYNAME для записи, уничтожив имевшееся в нем содержимое ofstream туп( МУКАМЕ ); теперь запишем в файл туп << У попа была собакаХп ; Конструктор of stream (char получает только имя, а потому ис- пользует для режима открытия файла значения по умолчанию. Если файл MYNAME уже существует, он урезается; в противном случае создается новый файл MYNA Кроме того, файл открывается в режиме совместного чтения и записи. Второй конструктор stream(char*, int), позволяет программисту указывать другие режимы ввода-вывода. Например, если бы я захотел открыть файл в бинарном режиме и произвести запись в конец этого файла (если он уже существует), я мог бы создать объект класса ofstream так, как приведено ниже (напомню, что в бинарном режиме при выводе не выполняется преобразование символа цовой строки \ц в пару символов иеревода каретки и новой строки \г\п, так же как при вводе не происходит обратного преобразования). linclude <fstreain.h> void fn() откроем бинарный файл BINFILE для записи; если он существует, дописываем информацию в конец файла ofstream bfile( BINFILE , ios:;binary)ios:rate); ..продолжение программы... Функция-член bad () возвращает 1, если при работе с файловым объектом возникли ошибки. В приведенном выше примере для проверки того, что файл открыт правильно, надо было написать следующее: #includt< <f stream, h> void fn )) { ofstream myn( MYNAME ); if(myn.badO) Если открыть файл не удалось... cerr Ошибка при открытии файла MYNAMEXn ; return; произведем запись в файл туп << У попа б1ла собака\п ; Все попытки обратиться к объекту класса ofstream, который содержит ошибку, не вызовут никакого действия, пока флаг ошибки не будет сбро- шеи с помощью функции clear (). Деструктор класса г earn автоматически закрывает файл. В предыдущем примере был закрыт при выходе из функции. Класс ifstream работает для ввода почти так же, ка геатдля вывода, что и демонстрирует приведенный ниже пример. #include <fstream.h> void fr. () ( Откроем файл для чтения; не создавать файл, если он отсутствует ifstream bankStatement ( STATEMNT , ios: -.nocireate) ; cerr He могу найти файл STATEMNTXn ; return; Цикл считывания ла, пока не будет достигнут его конец (eof) while ( Ibankstatement.eofО ) bankStatement tNumber >> amount; . . . обработаем полученную запись . . ,
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |