目录
1.函数默认参数
2.函数占位数
3.函数重载*
1.函数默认参数
形参列表中可以有默认值。
注意:如果某个位置有默认值,那么这个位置之后的都要有。如果函数声明有默认值了,函数实现的时候就不能有默认值(防止默认值不同而导致的参数重定义)。
#include<iostream>
using namespace std;
int func(int a, int b = 10, int c = 10) {
return a + b + c;
}
//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数
int func2(int a = 10, int b = 10);
int func2(int a, int b) { //这里千万不能再设置默认参数!!!!!
return a + b;
}
int main() {
cout << "ret = " << func(20, 20) << endl;
cout << "ret = " << func(100) << endl;
system("pause");
return 0;
}
2.函数占位数
形参列表中可以有占位参数,调用函数时必须填补(就算用不到)!!!
占位参数还可以有默认参数,这样调用的时候就可以不填补了。
#include<iostream>
using namespace std;
//函数占位参数 ,占位参数也可以有默认参数
void func(int a, int = 10) {
cout << "this is func" << endl;
}
int main() {
func(10, 10); //占位参数必须填补
system("pause");
return 0;
}
3.函数重载*
重载的条件:两个相同,“一”个不同。同一作用域,函数名称相同,函数参数不同(函数参数类型不同、个数不同、顺序不同)。
注意:函数的返回值不可以做为函数重载的条件!!!!
重点:1)引用作为重载条件(常量引用和变量引用是可以作为重载条件的,这也属于类型不同,但这就无法发挥常量引用的意义了),而且要注意func(int a)与func(int& a)是不能重载的。
2)一定要注意函数重载时的默认参数问题,应该尽量避免歧义!!!!!
#include<iostream>
using namespace std;
//函数重载注意事项
//1、引用作为重载条件
void func(int& a)
{
cout << "func (int &a) 调用 " << endl;
}
void func(const int& a)
{
cout << "func (const int &a) 调用 " << endl;
}
//2、函数重载碰到函数默认参数
void func2(int a, int b = 10)
{
cout << "func2(int a, int b = 10) 调用" << endl;
}
void func2(int a)
{
cout << "func2(int a) 调用" << endl;
}
int main() {
int a = 10;
const int b = 20;
func(a); //调用无const,可以调用第一或者第二个,但这里调进去的是个变量,所以优先第一个
func(10);//调用有const,这里不能调用第一个,因为 int& a = 10不合法!!!
func(b);//调用有const,这里传入的是一个常量,所以优先调用第二种
//func2(10); //碰到默认参数产生歧义,需要避免
system("pause");
return 0;
}