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!