Программирование на C и C++

Онлайн справочник программиста на C и C++

Собственные операторы извлечения и вставки

Как много раз говорилось в этом разделе, поскольку основанные на массивах потоки продолжают оста­ваться потоками, то можно создавать собственные функции извлечения и вставки в точности тем же способом, что и для потоков других типов. Например, в следующей программе создается класс plot, поддерживающий координаты X и Y точек в двумерном пространстве. Перегруженный для этого клас­са оператор вставки выводит небольшую координатную плоскость и изображает на ней положение точки. Для простоты область изменения координат X и Y ограничена пределами от 0 до 5.

#include <iostream.h>
#include <strstrea.h>
const int size=5;
class plot {
int x, y;
public:
plot (int i, int j) {
// для простоты ограничим x и у нулевыми размерами
if (i>size) i = size; if (i<0) i=0;
if (j>size) j = size; if (j<0) j=0;
x=i; y=j;
}
// инсертер для plot
friend ostream &operator<<(ostream &stream, plot o);
};
ostream &operator<<(ostream &stream, plot o)
{
register int i, j;
for(j=size; j>=0; j-—) {
stream << j;
if(j == о.у) {
for (i=0; i<o.x; i++) stream << " ";
stream << '*';
}
stream << "\n";
}
for (i=0; i<=size; i++) stream << " " << i;
stream << "\n";
return stream;
}
int main()
{
plot a(2, 3), b(1, 1);
// вывод с помощью cout
cout << "Output using cout:\n";
cout << a << "\n" << b << " \ n \ n";
char str[200]; // использование ввода/вывода в память
ostrstream outs(str, sizeof (str));
// вывод осуществляется с помощью outs, и происходит форматирование в памяти
outs << а << b << ends;
cout << "Output using in-RAM formatting:\n";
cout << str;
}

Эта программа выведет следующий результат:

Output using cout:
5
4
3       *
2
1
0
   0 1 2 3 4 5
5
4
3
2
1    *
0
   0 1 2 3 4 5

Output using in-RAM formatting:
5
4
3       *
2
1
0
   0 1 2 3 4 5
5
4
3
2
1    *
0
   0 1 2 3 4 5