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 3Notice 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
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).