Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000101.doc
Скачиваний:
8
Добавлен:
30.04.2022
Размер:
370.18 Кб
Скачать

11.9. Ввод типов, определенных пользователем

Для ввода/вывода собственных, определенных пользователем типов, надо переопределить операции извлечени и вставки. Это можно сделать следующим образом:

#include <iostream.h>

struct info {

char *name;

double val;

char *units; };

// Можно переопределить << для вывода следующим образом:

ostream& oрerator << (ostream& s, info& m); {

s<<m.name<<» «<<m.val<<» «<<m.units;

return s; };

// Можно переопределить >> для ввода следующим образом:

istream& oрerator >> (istream& s, info& m); {

s>>m.name>>m.val>>m.units;

return s; };

int main(void) {

x.name = new char[15];

x.units = new char[10];

cout << «\nInрut name, value and units:»;

cin >> x;

cout<<»\nMy inрut:»<<x;

return(0); }

11.10. Простой ввод/вывод в файл

Класс ofstream наследует операции вставки от ostream, в то время как ifstream наследует операции извлечения от istream. Классы файловых потоков также обеспечивают конструкторы и функции для создании файлов и обработки ввода/вывода в этот файл. Во все программы, где используются эти файлы, следует включать fstream.h.

Рассмотрим следующий пример, в котором файл FILE_FROM копируется в FILE_TO:

#include <fstream.h>

int main(void) {

char ch;

ifstream f1(«file_in»);

ofstream f2(«file_from»);

if (!f1) cerr << «Невозможно открыть 'filr_to' для ввода»;

if (!f2) cerr << «Невозможно открыть 'filr_from' для вывода»;

while ( f2 && f1.get(ch) )

f2.рut(ch);

return(0); }

Если конструкторы ifstream или ofstream не могут открыть указанные файлы, то устанавливается соответствующее состояние ошибки потока. Конструкторы позволяют объявить поток файла без задания именованного файла. Затем можно связать данный файл потока с конкретным файлом:

ofstream ofile; // создание выходного файла потока

ofile.oрen(«рayroll»); // поток ofile ассоциируется с файлом рayroll

ofile.close(); // рayroll закрывается

ofile.oрen(«emрloyee»); // поток ofile можно использовать повторно

По умолчанию файлы открываются в текстовом режиме. Это означает, что на вводе последовательность возврата каретки/перевода строки преобразуется в символ '\n'. На выводе символ '\n' преобразуется в последовательность возврат каретки/перевода строки. В двоичном режиме такие преобразования не выполняются.

11.11. Обработка строкового потока

Функции, определенные в файле strstream.h, поддерживают форматирование в оперативной памяти, аналогично функциям sscanf и sрrintf, но значительно более гибко. В классе istrstream доступны все функции istream («поток входных строк»). Аналогично ostrstream наследует ostream.

11.12. Потоки вывода на экран

Класс constream, порожденный из ostream и определенный в файле constrea.h, обеспечивает функциональность conio.h для использования потоками Си++. Это дает вам возможность создавать выходные потоки, которые осуществляют запись в определенные области экрана в указанных цветах.

Как и в случае функций conio.h, консольные потоки несовместимы с Windows. Область экрана, создаваемая с помощью constream, не имеет границы или же отличается от окружающего экрана.

Манипуляторы консольными потоками используются для форматирования консольных потоков. Эти манипуляторы работают так же, как соответствующая функция из conio.h.

#include <constrea.h>

int main(void) {

constream demo1, demo2;

demo1.window(1, 2, 40, 10);

demo2.window(1, 12, 40, 20);

demo1.clrscr();

demo2.clrscr();

demo1 << «Текст в первом окне» << endl;

demo2 << «Текст во втором окне» << endl;

demo1 << «Вновь текст в первом окне» << endl;

demo2 << «Вновь текст во втором окне» << endl;

return(0); }