Define custom behavior for operators with your user-defined types.
Operator overloading allows you to specify custom implementations for C++ operators when they are used with objects of your own classes. This can make your code more intuitive and readable because you can use familiar syntax with your custom types. For example, instead of writing `Vector v3 = v1.add(v2);`, you could overload the `+` operator and simply write `Vector v3 = v1 + v2;`. You can overload most C++ operators, including arithmetic (`+`, `-`, `*`), relational (`==`, `!=`, `<`), and even I/O stream operators (`<<`, `>>`). An operator is overloaded by writing a special function, either as a member function of the class or as a non-member (global) function. The name of the function is the keyword `operator` followed by the symbol for the operator you're overloading (e.g., `operator+`, `operator==`). When the operator is a member function, the left-hand operand is the object calling the function (`this`), and the right-hand operand is passed as an argument. When it's a non-member function, both operands are passed as arguments. Operator overloading should be used judiciously. The custom behavior should be logical and consistent with the operator's conventional meaning. Overloading operators in a non-intuitive way can make code confusing and difficult to understand.