Программирование >>  Аргументация конструирования 

1 ... 89 90 91 [ 92 ] 93 94 95 ... 108


объект - справа. Во-втор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).

ФЛАГ

НАЗНАЧЕНИЕ

ios = ate ios: : in

ios::Out

io : trunc

io : nocreate io : noreplace io ; binary

Дописывать в конец файла, если он существует

Откргть файл для ввода (подразумевается для istream)

Откргть файл для вывода (подразумевается для ostream)

Обрезать файл до нулевой длины, если он существует (используется по умолчанию)

Если файла не существует, вернуть сообщение об ошибке

Если файл существует, вернуть сообщение об ошибке

Открыть файл в бинарном режиме (альтернатива текстовому режиму)

Таблица 26.3. Значения аргументное в конструкторе класса&tream

ФЛАГ

НАЗНАЧЕНИЕ

filebuf: : openprot filebuf: one :

filebuf: :3li write

Режим совместного ения и записи Исключительный режим без совместного доступа Режим совместного чтения Режим совместной записи

Приведенная ниже программа открывает файл а затем записывает в него

некоторую важную информацию. 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;

. . . обработаем полученную запись . . ,




1 ... 89 90 91 [ 92 ] 93 94 95 ... 108

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика