You are correct about overloaded functions, however depending on what you want the functions to do they may not be necessary. Standard conversions will promote primitives so one function that accepts a double will accept all other primitives -
The only one from the above example that you may want to overload is a function to accept a character (otherwise you'll get it's value outputted rather than the character).
void foo(double b)
cout << b;
char a = 1;
int b = 2;
float c = 3;
double d = 4;
However, you need to know the input type before you can call the overloaded function. You could get the input as a character string and then check what it consists of (which you could then convert to an integer or floating point type), but you could never be sure what the input what supposed to be.