#include <iostream.h>
class Point
{ private:
int x, y; // die Koordinaten
public:
Point(int X=0);
Point(int, int);
Point& add(Point&);
Point& operator + (Point&);
friend ostream& operator << (ostream&, const Point&);
void assign(int, int);
};
void Point::assign(int X, int Y)
{ x = X; y = Y;
}
Point::Point(int X)
{ assign(X, X);
}
Point::Point(int X, int Y)
{ assign(X, Y);
}
Point& Point::add(Point &p)
{ // Es wird durch den Aufruf des Konstruktors
// ein temporäres Objekt erzeugt, das nach
// der Zuweisung wieder gelöscht wird
return Point(x+p.x, y+p.y);
}
Point& Point::operator + (Point& p)
{ return add(p);
}
ostream& operator << (ostream& s, const Point& p)
{ return s << '(' << p.x << ',' << p.y << ')';
}
main()
{ Point a(2), b(2,3), c;
c = a.add(b); // Funktionsaufruf
c = a + b; // Element-Operator +
c = a.operator+(b); // wie vorher
// Das empfangende Objekt ist implizit
// der linke Operand.
cout << c << endl; // Friend Operator <<
}