It allows users of your classes to use intuitive syntax.
Operator overloading allows C/C++ operators to have user-defined meanings on user-defined types (classes). They're syntactic sugar for function calls:
class Fred { public: //... }; #if 0 Fred add(Fred, Fred); //without operator overloading Fred mul(Fred, Fred); #else Fred operator+(Fred, Fred); //with operator overloading Fred operator*(Fred, Fred); #endif Fred f(Fred a, Fred b, Fred c) { #if 0 return add(add(mul(a,b), mul(b,c)), mul(c,a)); //without... #else return a*b + b*c + c*a; //with... #endif }