Overloading
Functions are distinguished by the compiler by the number and type of arguments used in the function invocation.
Dog * operator + (Dog * left, Dog * right) {
// return a new Dog value that is the sum of the parents return new Dog();
Cat * operator + (Cat * left, Cat * right) { return new Cat();
Almost all C++ operators can be overloaded.