10 函数提高
10.1 函数默认参数
1.定义:在C++中,函数的形参列表中的形参可以有默认值
2.语法:返回值类型 函数名(参数 = 默认值){函数体}
3.注意事项:
-
有默认值的形参必须全部存在于形参列表的尾部,即不能出现“有默认值的形参后存在无默认值的形参”
int fun(int a, int b = 10, int c = 20) { // 实现传入三个数据的求和操作 return a + b + c; } int main() { cout << fun(1) << endl; cout << fun(1, 2) << endl; cout << fun(1, 2, 3) << endl; system("pause"); return 0; } /****************输出结果***************/ 31 // 1+10+20 23 // 1+2+20 6 // 1+2+3 -
函数声明与函数定义二者只能有一个存在默认参数
int fun(int a, int b = 10, int c = 20); // 函数声明中有默认参数 int main() { cout << fun(1) << endl; system("pause"); return 0; } int fun(int a, int b, int c) { // 声明中有默认参数的情况下,函数定义中不能有默认参数 return a + b + c; }
10.2 函数占位参数
1.定义:C++中函数的形参列表里用于占位的参数,调用函数时必须填补该位置
2.语法:返回值类型 函数名(数据类型){}
3.解释:与普通函数定义返回值类型 函数名(数据类型 形参名){}的不同在于,括号中只写该形参的数据类型,而无需写形参名
10.3 函数重载
10.3.1 函数重载概述
1.作用:函数名可以相同,以提高复用性
2.需要满足的条件:
- 同一个作用域下
- 函数名称相同
- 函数参数的 类型不同 或 个数不同 或 顺序不同
10.3.2 函数重载注意事项
-
引用作为重载条件
#include<iostream> using namespace std; void func(int& a) { cout << "func1" << endl; } void func(const int &a) { cout << "func2" << endl; } int main() { int a = 10; func(a); func(10); system("pause"); return 0; } /********* 输出结果 ********/ func1 func2解释:
void func(int& a){}函数的形参为普通的变量引用,void func(const int& a){}函数的形参为常量引用。因此,在主函数中以“变量a”作为参数输入给函数,会调用第一个函数,输出func1;以“常数10”作为参数输入给函数,会调用第二个函数,输出func2。注意:
需要注意的是,调用
func(a)进入第一个函数的前提是func()为函数重载,并不意味着以变量a = 10作为参数不能进入函数void func(const int& a){},只是在重载的条件下,变量a = 10由于自身是变量优先选择函数void func(int& a){}进行调用。当只有函数void func(const int& a){}时,变量a = 10同样可以作为参数传入(这不就是普通的常量引用吗)。 -
函数重载碰到默认参数
#include<iostream> using namespace std; void func(int a, int b = 1) { // 含默认参数 cout << "func1" << endl; } void func(int a) { cout << "func1" << endl; } int main() { func(10); // 这里会报错 system("pause"); return 0; }解释:
上述情况当调用
func(10)时,10既可以当做 有默认参数的 、拥有两个形参的 第一个函数的参数,又可以当做 无默认参数的 、 只有一个形参的 第二个函数的参数,会导致报错。所以在有函数重载的情况下,在定义时尽量不要默认参数
C++函数提高:默认参数、占位参数与重载
669

被折叠的 条评论
为什么被折叠?



