default values for default constructor
and operator[], operator+ is overloaded
[] can be used both in lhs and rhs.
+ is implemented as a non-member function so that
it is with two parameters. lhs is not mutable.
return type is object.
== is implemented as a friend function for value and size comparison.