Overload C++

#include 
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;
}