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 is with one parameter. lhs is mutable.
return type is reference to lhs.
== is implemented as a friend function for value and size comparison.