Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Часть V. Полезные особенности
объект — справа. Во-вторых, оператор сдвига влево имеет очень низкий приори- тет. Благодаря этому выражения с ним работают так, как ожидается. #include void fnfin t a, in t b) { • cout « "a + b" « a + b « "\n"; // cperator+ имеет более высокий приоритет, // чем : // Следовательно, данное выражение // интерпретируется как //cout « "а « (а + Ь) << "\п"; //а не как //cout « ("а + « а) + « "\п"); } В-третьих, оператор сдвига влево вычисляется слева направо, что позволяет запи- сывать длинные выражения вывода. Так, приведенное выше выражение интерпре- тируется следующим образом:
void a, int b) f ((cout « + « a + b) « "\n";
Но, на мой взгляд, настоящая причина кроется в том, что оператор сдвига здорово смотрится. Символы выглядят так, как будто что-то выводится из программы, а "» " — как будто что-то вносится в нее. И наконец, бы и не па"?..
А что же такое Объект класса содержит члены, необходи- мые для управления потоком ввода-вывода. A соответственно описывает поток ввода. В С эквивалентна структура FILE, определенная в Функция open () открывает файл для ввода и вывода и возвращает указатель на объект типа FILE, в котором хранится информация, необходимая для осуществления операций ввода-вывода. Этот объект используется при вызове функций f... таких как , и В составе библиотеки потоков ввода-вывода определено еше несколько подклас- сов ostream и istream, которые используются для ввода и вывода в файлы и внут- ренние буферы.
с Подклассы ifstrea m и fstream объявлены в заголовочном файле и обеспечивают потоки ввода-вывода в дисковые файлы. Эти три класса предоставляют множество функций для управления вводом и выводом, многие из ко- торых наследуются от ostream и istream. Полный список этих функций вы можете найти в документации к компилятору, а здесь я приведу только несколько из них, чтобы вы могли с начать. Класс ofstream, который используется для файлового вывода, имеет несколько конструкторов; наиболее часто применяется следующий:
int mode = ios::out, int prot
Глава 26. Использование потоков ввода-вывода Первый аргумент этого конструктора — указатель на имя открываемого файла. Второй и третий аргументы определяют, как именно должен быть открыт файл. Кор- ректные значения аргумента mode приведены в табл. 26.2, a pro t — в табл. 26.3. Эти значения являются битовыми полями, к которым применяется оператор OR (классы io s и — родительские по отношению к ostream). Таблица26.2.Значенияаргументаmodeвконструкторекласса stream ФЛАГ НАЗНАЧЕНИЕ ios ios
ios ios ios
ate in
trunc
nocreate noreplace binary Дописывать в конец файла, если он существует Открыть файл для ввода (подразумевается для Открыть файл для вывода (подразумевается для ostream ) Обрезать файл до нулевой длины, если он существует (используется по умолчанию) Если файла не существует, вернуть сообщение об ошибке Если файл существует, вернуть сообщение об ошибке Открыть файл в бинарном режиме (альтернатива текстовому режиму) Таблица 26.3. Значения аргумента в конструкторе класса stream ФЛАГ НАЗНАЧЕНИЕ filebuf : : openpro t Режим совместного чтения и записи : Исключительный режим без совместного доступа : Режим совместного чтения filebuf : Режим совместной записи
Приведенная ниже программа открывает файл а затем записывает в него некоторую важную информацию.
void fn() { // Откроем текстовый файл MYNAME для записи, // уничтожив имевшееся в нем содержимое
//теперь запишем в файл туп << "У попа была собака\п"; } Конструктор of strea m (char получает только имя, а потому ис- пользует для режима открытия файла значения по умолчанию. Если файл MYNAME уже существует, он урезается; в противном случае создается новый файл MYNAME. Кроме того, файл открывается в режиме совместного чтения и записи. Второй конструктор, int) , позволяет программи- сту указывать другие режимы ввода-вывода. Например, если бы я захотел открыть файл в бинарном режиме и произвести запись в конец этого файла (если он уже су- ществует), я мог бы создать объект класса ofstrea m так, как приведено ниже (напомню, что в бинарном режиме при выводе не выполняется преобразование сим- вола новой строки \п в пару символов перевода каретки и новой строки так же как при вводе не происходит обратного преобразования).
|
Последнее изменение этой страницы: 2019-04-19; Просмотров: 230; Нарушение авторского права страницы