C语言没有函数名重载,C++有函数名重载。
函数名相同,函数参数列表不同,称为函数名重载。函数参数列表不同包括:
1)参数个数不同;
2)参数类型不同;
#include "stdio.h"
double find_max(double a, double b, double c)
{
double max = a;
if(max < b)
{
max = b;
}
else if(max < c)
{
max = c;
}
return max;
}
int main()
{
double a = find_max(1.1, 0.2, 3.3);
printf("%f", a);
return 0;
}
/*
//run out:
3.3000
*/
函数匹配步骤:
1)先根据函数名查找
找到一个或多个同名函数(如果一个也没有,就会编译报错)
2)按”类型“+”个数“匹配
第一种情况:找到一个完全匹配的函数,则调用该函数;
第二种情况:没有找到完全匹配的函数,这时跳到第三步模糊匹配。
3)模糊匹配
这种情况比较复杂。(但一定是参数个数相同)
模糊匹配实例:2个整数值比大小,返回大的那个值。
#include "stdio.h"
double find_max(double a, double b, double c)
{
double max = a;
if(max < b)
{
max = b;
}
else if(max < c)
{
max = c;
}
return max;
}
double find_max(double a, double b)
{
double max = a;
if(max < b)
{
max = b;
}
return max;
}
int main()
{
int a = 1;
int b = 2;
double result = find_max(a, b);
printf("%f", result);
return 0;
}
/*
//run out:
2.000000
*/
从上面的实例中可以看出,find_max并没有找到完全匹配的函数,这时先比较参数个数,相同的作为候选,然后从候选中查看传入的a,b能否从int转成double,如果可以,那么就使用该函数。否则就会编译报错。