Prev Next Up Title Contents Index

Omien luokkien käsittely tietovirrassa


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 - malli tietovirtojen käytöstä omille luokille

	/* 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!

Tehtävä 1.33 Extractor

Muuta mystream.cpp sellaiseksi että pisteen syöttöön kelpaa suluiksi myös [] ja {}. Sekasulkuja ei kuitenkaan sallita, eli esim. (1,2) ja [1,2] ovat oikeita syöttöjä, mutta (1,2] on väärä.


Prev Next Up Title Contents Index