All of these can co-exist. The return type is NOT part of the
signature. The computer will know which one to use by looking at
the arguments when the function is called.
int k, m, n;
char p, q, r;
float a, b, c;
f(k); //calls int f(int x);
f(p); //calls int f(char x);
f(a); //calls char f(float y);
We can also have
float f(int x, int y);
int f(float x, int y);
int f(int x, float y);
f(k, m); //calls float f(int x, int
y);
f(a, k); // calls int f(float x,
int y);
f(k, a); // call int f(int x, float
y);
We CANNOT also have
char f(char x); This has the same signature as int
f(char x); even though the return type is
different.
We CANNOT also have
int f(int & x); This has the same signature
as int f(int x);