default values for default constructor and operator[], operator+ is overloaded
[] can be used both in lhs and rhs.
+ is implemented as a member function so that it returns reference to itself by mutating the left operand.