This givens an example showing overloading I/O operators (in a very simple way). The complete code for this example can be found in overloadIO.cpp
int main() {
Point p, q;
cout << "enter a point: ";
cin >> p;
cout << "you entered: " << p << endl;
cout << "enter another point: ";
cin >> q;
cout << "you entered: " << q << endl;
return 0;
}
class Point {
friend ostream & operator<<(ostream & out, const Point & p);
friend istream & operator>>(istream & in, Point & p);
public:
// constructors
Point(): x(0), y(0) { }
Point(int a, int b): x(a), y(b) { }
// accessors
int getX() const { return x; }
int getY() const { return y; }
// mutators
void setX(int newX) { x = newX; }
void setY(int newY) { y = newY; }
private:
int x, y;
};
ostream & operator<<(ostream & out, const Point & p) {
out << "(" << p.x << "," << p.y << ")";
return out;
}
istream & operator>>(istream & in, Point & p) {
char ch;
int x, y;
in.get(ch);
while (ch == ' ' || ch == '\n' || ch == '\t')
in.get(ch);
if (ch != '(') {
return in;
}
in >> x; // read in x value
in.get(ch);
while (ch == ' ' || ch == '\n' || ch == '\t')
in.get(ch);
if (ch != ',') {
return in;
}
in >> y; // read in y value
in.get(ch);
while (ch == ' ' || ch == '\n' || ch == '\t')
in.get(ch);
if (ch != ')') {
return in;
}
// only after the entire point has been read in successfully do we update p
p.x = x;
p.y = y;
return in;
}