5.1. Использование потоков ввода-вывода
С помощью перегрузки операторов ввода и вывода можно заставить компилятор распознавать в операторах ввода-вывода один или несколько необходимых классов. Рассмотрим, как создаются потоковые классы.
5.1.1. Перегрузка операторов вывода в поток
Обычно потоки вывода поддерживают только стандартные типы данных. С помощью перегрузки оператора вывода в поток << можно заставить выражения выводить объекты собственных классов.
// Программа 1
#include <iostream.h>
class TPoint {
private:
int x,y;
public:
TPoint() { x = y = 0;}
TPoint(int xx, int yy) { x = xx; y = yy; }
void PutX(int xx) { x = xx; }
void PutY(int yy) { y = yy; }
int GetX(void) { return x; }
int GetY(void) { return y; }
friend ostream& operator<< (ostream& os, TPoint &p);
};
void main()
{
TPoint p;
cout << p << endl;
p.PutX(100);
p.PutY(200);
cout << p << endl;
}
ostream& operator<< (ostream& os, TPoint &p)
{
os << » x== » << p.x << «, y == » << p.y ;
return os;
}
Поток вывода перегружен в виде дружественной функции. Так как функция возвращает ссылку на osteram то можно выводить несколько объектов в одном операторе вывода в поток.
cout << p1 << p2 << p3 << p4;
5.1.2. Перегрузка операторов ввода из потока
С помощью перегрузки оператора ввода из потока >> можно читать объекты класса.
friend istream& operator>> (istream& is, TPoint &p);
cin >> p;
cout << endl << «You entered: » << p;
}
istream& operator>> (istream& is, TPoint &p)
{
is >> p.x >> p.y ;
return is;
}
5.2. Файловые потоки
Файловые потоки представляют объектно-ориентированный способ чтения и записи информации в дисковые файлы. Библиотека файловых потоков разработана для работы только с текстовыми файлами. Однако можно применить ее и для чтения и записи двоичных значений, текстов, структур или любых других объектов.
Класс файловых потоков подключается заголовочными файлами fstream.h и iostream.h. Нужно учесть несколько моментов при использовании файловых потоков.
— все классы файловых потоков, за исключением filebuf, — производные от класса ios. Благодаря своей наследственности они могут использовать функции-члены, манипуляторы, флажки состояния и другие методы обработки потоков из файла iostream.h.
— для чтения данных из файлов используйте класс ifstream, производный от класса istream.
— для выходных файлов используйте класс ofstream, производный от класса ostream.
— для чтения и записи в один файл используйте класс fstream.
— класс filebuf предоставляет буферизованный сервис ввода-вывода для этих классов.
