abstraction mechanisms: classes and operator overloading
operator overloading
basic rules -
functions defining meanings for the following operators can be declared:
+ - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- ->* , -> [] () new new[] delete delete[]
<< | >>