Operator Overloading C++ Tutorial

#include 
class number {
public:
  number(int i = 0) : value(i) {
  }
  operator int() const {
    return value;
  }
  number& operator=(const number& n) {
    std::cout<<"=";
    value = static_cast(n);
    return *this;
  }
private:
  int value;
};
number operator+(const number& x, const number& y)
{
  std::cout<<"+";
  return number(static_cast(x) + static_cast(y));
}
int main()
{
  number a[10], b(42);
  number* p;
  a;           // lvalue
  a[0];        // lvalue
  &a[0];       // rvalue
  *a;          // lvalue
  p;           // lvalue
  *p;          // lvalue
  10;          // rvalue
  number(10);  // rvalue
  a[0] + b;    // rvalue
  b = a[0];    // lvalue
}
+=