Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
47
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать

Классы iostream.

Все объекты ввода/вывода, описанные в библиотеке iostream, используют оди и тот же базовый класс ios (за исключением классов буферизованных потоков). Эти производные классы делятся на 4 категории.

Классы потокового ввода

istream

Универсальный класс ввода, или родительский класс для других производных потоковых классов ввода.

ifstream

Ввод из файлов.

istream_withassign

Ввод из потока cin.

istrstream

Ввод из строки.

Классы потокового вывода

ostream

Универсальный класс вывода, или родительский класс для других производных потоковых классов вывода.

ofstream

Вывод в файлы.

ostream_withassign

Вывод в потоки cout, cerr и clog.

ostrstream

Вывод в строку.

Классы потокового ввода/вывода

iщstream

Универсальный класс ввода/вывода, или родительский класс для других производных потоковых классов ввода/вывода.

fstream

Ввод/вывод в файлы.

stdiostream

Стандартный поток ввода/вывода.

strstream

Ввод/вывод в строку.

Классы буферизованных потоков

streambuf

Родительский класс для производных буферизованных классов.

filebuf

Буферизованный поток для файлов.

stdiobuf

Буферизованный поток для стандартного файлового ввода/вывода.

strstreambuf

Буферизованный поток для строк.

Все производные от ios используется объект класса streambuf.

Потоковый ввод-вывод.

Используемый в следующем примере класс ifsteam :

#include <fstream.h>

void main()

{

char one_line[80];

ifstream my_input_stream(“iputfile.cpp”,ios::in);

while(my_input_stream)

{

my_input_stream.getline(one_line,sizeof(one_line),’*’);

cout<<endl<<one_line;

}

my_input_stream.close();

}

Для объекта my_input_stream можно использовать методы open(), rdbuf() из класса ifstream и ряд методов из родительского класса istream: gcount(),get(), getline(), ignore(), peek(), putback(), read(), seekg(), tellg().

При создании объекта вызывается конструктор, которому передается имя файла, а также один или несколько режимов ввода, задаваемые константами, предопределенными в классе ios (ios::in ios::binary ios::nocreate). Константы объединяются с помощью операции побитового или “|”. Значение дескриптора файла можно использовать в логических проверках. При достижении конца файла оно устанавливается в ноль (условие EOF).

Метод getline() читает текстовые строки из входного потока (знак “*” является разделителем строк).

Классы ofstream позволяют выполнять вывод в поток streambuf:

#include <fstream.h>

#include <string.h>

void main()

{

int i=0;

long ltellp;

char sample[40]=”Sample string\n”;

ofstream my_out_stream(“outfile.out”,ios::out);

while(sample[i]!=0)

{

my_out_stream.put(sample[i]);

ltellp=my_out_stream.tellp();

cout<<”\ntellp value: “<<ltellp;

i++;

}

my_out_stream.write(sample,strlen(sample));

ltellp.my_out_stream.tellp();

cout<<”\ntellp after write: “<<ltellp;

my_out_stream.close();

}

Обратите внимание на то, что при выполнении этой программы производится преобразование символа “\n” в два символа в файле.

Допустимо использование методов open(), rdbuf() из класса ofstream и flush(), put(), seekp(), tellp(), write() из класса ostream.