1.函数的默认参数
 //如果b有了默认值,其后面的变量都要有默认值
int fun(int a, int b=10, int c=15)	
{
	return a + b + c;
}
 
//声明和定义只能一个里面写默认值。否则,当声明和定义里的默认参数不一样,会产生歧义。
int fun2(int a, int b = 100);
int fun2(int a, int b )
{
	return a + b;
}
 
2.//函数的占位参数
 fun3里的int就是。占位参数也可以有默认值int =100
void fun3(int a,int)
{
	cout << "函数的占位参数" << endl;
}
fun3(1,2);     //赋给相应类型的值即可
 
3.//引用作为函数参数
 第一个不加const的,里面得是个变量,第二个加上了const,里面赋给的要是常量。
void f1(int &a)
{
	cout << "f1(int &a)被调用了" << endl;
}
int a = 100;
f1(a);				//f1(int &a)被调用了
 
void f1(const int& a)
{
	cout << "f1(const int &a)被调用了" << endl;
}
f1(10);				//f1(const int &a)被调用了
 
4.函数的重载
 条件:
 -参数个数不同-参数类型不同-参数个数不同
 函数名称相同
 函数的作用域相同
int add(int a, int b)
{
	return a + b;
}
int add(int a, int b,int c)
{
	return a + b+c;
}
float add(float a, float b)
{
	return a + b;
}
cout << add(1, 2)<< endl;       
cout << add(1, 2,3) << endl;
cout << add(1.1, 2.2) << endl;
 
*函数的返回值类型不同,不能作为函数重载的条件。
float add(float a, float b)
{
	return a + b;
}
int add(float a, float b)
{
	return a + b;
}    //这样会报错,无法重载仅按返回类型区分的函数
 
5.函数重载中碰到函数默认参数,容易引发歧义
void fun(int a, int b = 10)
{
	cout << "有默认参数的函数被调用了" << endl;
}
void fun(int a)
{
	cout << "无默认参数的函数被调用了" << endl;
}
fun(2022);     //会报错。不知道调用的是哪个










