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 }
标签:10,函数,int,P95,C++,98,参数,默认,重载 来源: https://www.cnblogs.com/wjjgame/p/16389106.html