函数重载
语法:函数名相同,函数参数不同
实现函数重载的条件
- 同一个作用域
- 参数个数不同
- 参数类型不同
- 参数顺序不同
c中函数都是全局作用域,函数名不能相同。
c++中函数名可以相同
函数的返回值不可以作为函数重载条件,const可以做为重载条件
void func(int a,int b=10){};
void func(int a);
当函数重载碰到了函数默认参数,要注意避免二义性
func(10);编译器不知道调用那个
函数重载实现原理
编译器为了实现函数重载,也是默认为我们做了一些幕后的工作,编译器用不同的参数类型来修饰不同的函数名,比如void func();
编译器可能会将函数名称修饰成_func,当编译器碰到void func(int x),编译器可能将函数名修饰为_func_int,不同的编译器有不同的命名方法,没有一天统一的标准
函数默认参数
参数可以有默认值
void func(int a=10);//a默认值为10
如果有一个位置有了默认值,那么从这个位置开始,从左往右都必须要有默认值
void func(int a,int b=10,int c=20);//如果b有默认参数,后边的都要有
函数声明和实现,只能有一个有默认值
void func(int a,int b=10,int c=20);//声明和实现的默认参数只写一次
void func(int a,int b,int c)
{
};
函数占位参数
void func(int) int就是占位符
占位参数 调用时候必须要提供这个参数
占位参数也可以有默认值
c语言中没有默认参数和占位参数
占位参数没有什么大用途,只有重载++符号才有一点点用