Overload ++ and -- for three_d. : Plus Plus « Overload « C++






Overload ++ and -- for three_d.

  
#include <iostream>

using namespace std;

class three_d {
  int x, y, z; // 3-D coordinates
public:
  three_d() { x = y = z = 0; }
  three_d(int i, int j, int k) { x = i; y = j; z = k; }

  three_d operator++();
  three_d operator++(int notused);

  three_d operator--();
  three_d operator--(int notused);

  friend ostream &operator<<(ostream &strm, three_d op);
};

// Overload prefix ++ for three_d.
three_d three_d::operator++() {
  x++;
  y++;
  z++;

  return *this;
}

// Overload postfix ++ for three_d.
three_d three_d::operator++(int notused) {
  three_d temp = *this;

  x++;
  y++;
  z++;

  return temp;
}

// Overload prefix -- for three_d.
three_d three_d::operator--() {
  x--;
  y--;
  z--;
  return *this;
}

// Overload postfix -- for three_d.
three_d three_d::operator--(int notused) {
  three_d temp = *this;

  x--;
  y--;
  z--;

  return temp;
}

// The three_d inserter is a non-member operator function.
ostream &operator<<(ostream &strm, three_d op) {
  strm << op.x << ", " << op.y << ", " << op.z << endl;

  return strm;
}

int main()
{
  three_d objA(1, 2, 3), objB(10, 10, 10), objC;

  cout << "Original value of objA: " << objA;
  cout << "Original value of objB: " << objB;

  // Demonstrate ++ and -- as stand-alone operations.
  ++objA;
  ++objB;

  cout << "++objA: " << objA;
  cout << "++objB: " << objB;

  --objA;
  --objB;

  cout << "--objA: " << objA;
  cout << "--objB: " << objB;

  objA++;
  objB++;

  cout << endl;

  cout << "objA++: " << objA;
  cout << "objB++: " << objB;

  objA--;
  objB--;

  cout << "objA--: " << objA;
  cout << "objB--: " << objB;
  cout << endl;

  objC = objA++;
  cout << "After objC = objA++\n objC: " << objC <<" objA: " << objA << endl;

  objC = objB--;
  cout << "After objC = objB--\n objC: " << objC <<" objB: " << objB << endl;

  objC = ++objA;
  cout << "After objC = ++objA\n objC: " << objC <<" objA: " << objA << endl;

  objC = --objB;
  cout << "After objC = --objB\n objC: " << objC <<" objB: " << objB << endl;

  return 0;
}
  
    
  








Related examples in the same category

1.Overload ++ relative to MyClass class.Overload ++ relative to MyClass class.
2.Overload a unary operator ++Overload a unary operator ++
3.overloaded ++ operator in both prefix and postfix