Stream output in C++ is a good example of the power of overloading.
Every primitive type has a different stream output function.
ostream & operator << (ostream & destination, int source);
ostream & operator << (ostream & destination, short source);
ostream & operator << (ostream & destination, long source);
ostream & operator << (ostream & destination, char source);
ostream & operator << (ostream & destination, char * source);
// ... and so on
double d = 3.14;
cout << "The answer is " << d << '\n';