Function Overloading

The term function overloading refers to the fact that it is perfectly legal to have more than one function in the same scope, with the same name, as long as they have different parameter lists.

The combination of a function's name and it's parameter list is often known as the function signature. Using this definition, two functions in the same scope are considered different (and distiguishable by the compiler) if they have different signatures.

Example:

   int Process(double num);		  // function 1
   int Process(char letter);              // function 2
   int Process(double num, int position); // function 3
Notice that although all three functions have the same exact name, they each have a different parameter list. Some of them differ in the number of parameters (2 parameters vs. 1 parameter), and the first two differ in types (double vs. char). The compiler will distinguish which function to invoke based on what is actually passed in when the function is called.
   x = Process(3.45, 12);	// invokes the third function above
   x = Process('f');		// invokes the second function

Worth noting, also, is that a function that uses default parameters can count as a function with different numbers of parameters. For example, if we declare:
   int Process(double x, int y = 5);
this function would conflict not only with function 3 above (which already takes a double and an int), but it also conflicts with function 1 above, since we could invoke this one by just passing in a single parameter (the double).