函数重载
定义:
用同一个函数名定义不同的函数,当函数名和不同的参数搭配时函数的含义不同
注意事项:
重载函数在本质上是相互独立的不同函数(静态链编)
重载函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的
函数重载至少满足下面的一个条件:
参数个数不同
参数类型不同
参数顺序不同
代码示例:
int func(int x)
{
return x;
}
int func(int a, int b)
{
return a + b;
}
int func(int a,int b,int c){
return a+b+c;
}
函数重载+函数默认参数
可能造成二义性:
代码示例:
int func(int a, int b, int c = 0)
{
return a * b * c;
}
int func(int a, int b)
{
return a + b;
}
如果我使用一下代码就会产生二义性,无法通过:
c = func(1, 2);
因为由于有函数默认参数的存在,func(1,2)对于调用那个函数无法确定
函数重载和函数指针结合
函数指针:
函数具有可赋值给指针的物理内存地址,一个函数的函数名就是一个指针,它指向函数的代码。一个函数的地址是该函数的进入点,也是调用函数的地址。函数的调用可以通过函数名,也可以通过指向函数的指针来调用。函数指针还允许将函数作为变元传递给其他函数。
定义方式:
类型 (*指针变量名)(参数列表)
代码示例:注意区分指针函数与函数指针
函数指针:
int (*p) (int i,int j);
指针函数:
int *p(int i,int j){}
函数重载与函数指针
当使用重载函数名对函数指针进行赋值时
根据重载规则挑选与函数指针参数列表一致的候选者
严格匹配候选者的函数类型与函数指针的函数类型
代码示例:
int func(int a, int b)
{
return a + b;
}
int func(char a,char b){
return (a-'0')+(b-'0');
}
int (* PFUNC)(int a,int b);
int c=0;
PFUNC =func;
根据参数列表来选择执行那个函数
c=PFUNC(10,20);
后续更新:
函数重载
函数重写
函数重定义
参考博客:
https://blog.csdn.net/str999_cn/article/details/78591369