C++黑马程序员——P95-98. 函数高级
- P95. 函数高级——函数的默认参数
- P96. 函数高级——函数的占位参数
- P97. ...——函数重载——基本语法
- P98. ...——函数重载——注意事项
- (P95)函数默认参数
在C++中,函数的形参列表中的形参是可以有默认值的。
语法:返回值类型 函数名 (参数 = 默认值) { ... }
如果我们传入了自己的数据,就用自己的数据;如果没有,那么就会用默认值
注意事项:
1. 如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
1 int func1(int a, int b = 10, int c = 20)
2 {
3 return a + b + c;
4 }
5
6 //int func2(int a = 10, int b = 20, int c) //错误,因为c前面的参数有了默认值,那么c也要有默认值
7 //{
8 // return a + b + c;
9 //}
2. 如果函数声明有默认参数,那么函数实现就不能有默认参数
1 int func1(int a = 10, int b = 10);
2 //int func1(int a = 10, int b = 10) //错误;函数声明已经定义了默认参数,实现不能重定义默认参数
3 //{
4 // return a + b;
5 //}
一个测试案例
1 #include <iostream>
2 using namespace std;
3
4 int func(int a, int b = 10, int c = 10)
5 {
6 return a + b + c;
7 }
8
9 int main()
10 {
11 cout << func(20, 20) << endl; //a=20,b=20,c=10
12
13 system("pause");
14 return 0;
15 }
运行结果:50
- (P96)函数占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:返回值类型 函数名 (数据类型) { ... }
占位参数也可以有默认参数
1 //占位参数
2 void func1(int a, int)
3 {
4 cout << "HELLO" << endl;
5 }
6
7 //占位参数(第二个)的默认参数为10(当然也可以不设默认参数)
8 void func2(int a, int =10)
9 {
10 cout << "hello" << endl;
11 }
12
13 int main()
14 {
15 //func1(10); //错误,占位参数必须填补
16 func1(10, 10);
17 func2(10);
18
19 system("pause");
20 return 0;
21 }
- (P97)
作用:函数名可以相同,提高复用性
函数重载满足条件:
1. 同一个作用域下 //比如都在全局作用域
2. 函数名称相同
3. 函数参数类型不同 或者 个数不同 或者 顺序不同
注意:函数的返回值不可以作为函数重载的条件
- (P98)函数重载注意事项
- 引用作为重载条件
1 void func(int& a)
2 {
3 cout << "func(int& a)的调用" << endl;
4 }
5
6 void func(const int& a)
7 {
8 cout << "func(const int& a)的调用" << endl;
9 }
10 int main()
11 {
12 int a = 10;
13 func(a); //调用func(int& a) 调用无const
14 func(10); //调用 func(const int& a) 调用有const
15
16 system("pause");
17 return 0;
18 }
- 函数重载碰到函数默认参数
1 //函数重载碰到默认参数
2 void func(int a, int b = 10)
3 {
4 cout << "func(int a, int b = 10)的调用" << endl;
5 }
6
7 void func(int a)
8 {
9 cout << "func(int a)的调用" << endl;
10 }
11
12 int main()
13 {
14 //func(10); //错误,函数重载碰到默认参数,出现二义性,报错,尽量避免这种情况
15 func(10, 20);
16
17 system("pause");
18 return 0;
19 }