Operator overloading allows existing operators like + and - to be used with user-defined types by associating them with member functions. There are unary operators that operate on one operand and binary operators that operate on two operands. Common operators that can be overloaded include arithmetic, comparison, compound assignment, and increment/decrement. Overloading is done by defining member functions that match the operator's syntax and semantics.