Operator overloading allows normal C++ operators like + and - to have additional meanings when used with user-defined types. It makes statements more intuitive, for example writing d2 = d1 + 45 instead of d2.add_days(d1, 45). Operators can be overloaded by defining operator functions that specify their behavior for a class. Only certain operators can be overloaded, and their syntax and semantics must be preserved.