Operator Overloading Makes classes act like built-in types It has both good and evil uses The key is not to overuse it Using for output is almost always good Allows any class to be output: List list; std::cout << list << std::endl;