Function Overloading
We saw how C++ allows us to write a function that takes parameters either by value or by reference, using const, and organizes them in namespaces.
There is an additional powerful feature of C++ that allows us to give the same name to functions that perform the same conceptual operation on different types: function overloading.
Function overloading is the ability to declare several functions with the same name – that is, if the set of parameters they accept is different.
An example of this is the multiply function. We can imagine this function being defined for integers and floats, or even for vectors and matrices.
If the concept represented by the function is the same, we can provide several functions that accept different kinds of parameters.
When a function is invoked, the compiler looks at all the functions with that name, called the overload set, and picks the function that is the best match for the arguments provided.
The precise rule on how the function is selected is...