Kuten aikaisemmin mainittiin, on C++:n tietovirtojen eräs hyvä puoli siinä, että omat luokat voidaan käsitellä niillä helpommin kuin stdio:n funktiolla.
/* MYSTREAM.CPP -eli cPiste tietovirtaan ja sieltä takaisin */
#include <iostream.h>
class cPiste {
int x,y;
public:
cPiste(int ix=0, int iy=0) { x = ix; y = iy; }
friend ostream &operator<< (ostream &os, const cPiste &p);
friend istream &operator>> (istream &is, cPiste &p);
};
ostream &operator<< (ostream &os, const cPiste &p) // Inserter
{
os << '(' << p.x << ',' << p.y << ')';
return os;
}
int skip(istream &is, char s)
{
char c;
is >> c;
if ( c != s ) { is.putback(c); return 0; }
return 1;
}
istream &operator>> (istream &is, cPiste &p) // Extractor
{
int sulku = skip(is,'(');
is >> p.x; skip(is,',');
is >> p.y;
if ( sulku ) skip(is,')');
return is;
}
istream &hopute(istream &is) // IO-manipulaattori
{
cout << "Anna uusi cPiste muodossa (x,y) tai x,y tai x y >";
return is;
}
int main(void)
{
cPiste p(3,7);
do {
cout << "cPiste on: " << p << endl;
cin >> hopute >> p;
} while ( !cin.eof() && !cin.fail() );
return 0;
}
Ohjelma tulostaa pisteen ja kysyy uuden, kunnes tulee syöttövirhe:
Piste on: (3,7) Anna uusi piste muodossa (x,y) tai x,y tai x y >1 2 Piste on: (1,2) Anna uusi piste muodossa (x,y) tai x,y tai x y >7,9 Piste on: (7,9) Anna uusi piste muodossa (x,y) tai x,y tai x y >(-2,3) Piste on: (-2,3) Anna uusi piste muodossa (x,y) tai x,y tai x y >2,3) Piste on: (2,3) Anna uusi piste muodossa (x,y) tai x,y tai x y > ... ohjelma loppui!