C++ is convenient in that the input/output operators can be overloaded so that reading and writing objects of any class can look the same. For example, the C++ code to read a list of objects from standard input might look like
double a,b; int c; point d; // where `point' might be a user-defined class cin >> a >> b >> c >> d;
The down side is that the definition of the input and output methods is somewhat cryptic, for example
// define a class consisting of a pair of coordinates defining a point class point { double x, y; // x and y coordinates // method to read from an input stream friend istream& operator>>(istream& stream, point& a) { stream >> a.x >> a.y; return stream; } // method to write to an output stream friend ostream& operator<<(ostream& stream, point& a) { stream << a.x << ' ' << a.y; return stream; } };
Class `Classio' provides an easier framework for input and output. It is intended to be inherited by any user-defined class. These classes can then use a simpler form of input and output method (member methods `Read and Write') which `Classio' calls with the cryptic friend method as above.
Here is a skeleton for a class inheriting from `classio':
#include <classio.h> ... class MY_CLASS_NAME: public Classio { TYPE1 NAME1; ... void Read(istream& stream) { stream >> NAME1 >> ... ; void Write(ostream& stream) const // N.B. the `const' { stream << NAME1 << ... ; } };e.g. for the previous example:
#include <classio.h> class point: public Classio { double x, y; void Read(istream& stream) { stream >> x >> y; } void Write(ostream& stream) const { stream << x << ' ' << y; } };