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
}