Make op-- a friend; use reference : overload operator with friend « Operator Overloading « C++ Tutorial






#include <iostream>
using namespace std;

class Point {
  int x, y;
public:
  Point() {}
  Point(int px, int py) {
    x = px;
    y = py;
  }

  void show() {
    cout << x << " ";
    cout << y << "\n";
  }

  Point operator=(Point op2);
  friend Point operator++(Point &op);
  friend Point operator--(Point &op);
};

// Overload assignment for Point.
Point Point::operator=(Point op2)
{
  x = op2.x;
  y = op2.y;

  return *this; // i.e., return object that generated call
}

// Now a friend; use a reference parameter.
Point operator++(Point &op)
{
  op.x++;
  op.y++;

  return op;
}

// Make op-- a friend; use reference.
Point operator--(Point &op)
{
  op.x--;
  op.y--;

  return op;
}

int main()
{
  Point ob1(10, 20), ob2;

  ob1.show();
  ++ob1;
  ob1.show(); // displays 11 21

  ob2 =  ++ob1;
  ob2.show(); // displays 12 22

  --ob2;
  ob2.show(); // displays 11 21

  return 0;
}
10 20
11 21
12 22
11 21








10.16.overload operator with friend
10.16.1.Make op-- a friend; use reference
10.16.2.+ is overloaded using friend function