C++中函数的新玩法
文章目录
函数是一个完成某项特定任务的一小段代码,这段代码是有特殊的写法和调用方法的
函数的默认参数
在C++中,函数的形参列表中形参时可以有默认值的
语法
返回值类型 函数名 (参数 = 默认值) {}
// 函数的默认参数
int func(int a , int b = 20, int c = 30) { //如果我们自己传入参数,就用自己的值,如果没有,那就用默认值
return a + b + c;
}
int main() {
cout << func(10) << endl; // 只传一个参数,其余两个参数为默认值
return 0;
}
注意:
如果某个位置已经有了默认值,那么从这个位置往后,都必须有默认值(否则少传递一个参数的话,参数的顺序就会混乱) 如果函数的声明有默认参数,函数的实现就不能有默认参数.函数的默认参数只能在函数声明(如果有声明和定义分离的情况)或定义中指定一次,不能重复指定。 // // 函数的声明 // int func01(int a = 10, int b = 20); // // 函数的实现 // int func01(int a = 10, int b = 20) { // return a + b; // } // error // 函数的声明 int func01(int a = 10, int b = 20); // 函数的实现 int func01(int a, int b) { return a + b; right }
函数占位参数
C++中函数的形参列表可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:
返回值类型 函数名 (数据类型) {}
// 函数的占位参数,占位参数也可以有默认参数
void func(int a, int) {
cout << "this is func" << endl;
}
占位参数必须填补
int main() {
func(10); // error 占位参数必须填补
return 0;
}
函数重载
C++中的函数重载,(Function Overloading)是指在同一个作用域中可以有多个同名函数,它们的函数名称相同,但是参数列表不同
这里的不同值的是参数的数量,类型或顺序至少有一个不同,函数的返回类型并不影响函数的重载,因为C++编译器不会根据返回类型来区分不同的函数.
函数重载概述
作用: 函数名可以相同,提高复用性
编译器会根据调用函数时传递的参数,自动推导应该调用那个函数
// 实现两数之和
int Add(int a, int b) {
return a + b;
}
double Add(double a, double b) {
return a + b;
}
int main() {
int a = 5, b = 10;
double x = 5.5, y = 10.2;
cout << "整数相加: " << Add(a, b) << endl;
cout << "浮点数相加: " << Add(x, y) << endl;
return 0;
}
函数重载满足的条件:
- 同一个作用域下
- 函数名称相同
- 函数参数类型相同,或者个数不同 或者顺序不同
注意:函数的返回值不可以作为函数重载的条件
函数重载的注意事项
- 引用作为重载的条件
void func(int& a) { // int& a = 10; 不合法的
cout << "func(int&a) 调用" << endl;
}
void func(const int& a) { // const itn& a = 10; 合法
cout << "func(const int& a) 调用" << endl;
}
int main() {
int a = 10;
func(a); // func(int&a) 调用
func(10); // func(const int& a) 调用
return 0;
}
传递a,调用的是 func(int& a);,a 是一个变量,变量是可读可写的
加上const 之后,就变为只读状态,只能读取,不能修改
- 函数重载遇到默认参数
void func(int a) {
cout << "func(int a) 调用" << endl;
}
void func(int a, int b = 10) {
cout << "func(int a, int b = 10) 调用" << endl;
}
int main() {
//func(10); // error
func(10, 20); // func(int a, int b = 10) 调用
return 0;
}
当函数重载碰到默认,出现二义性,尽量避免
当值少传递参数的时候,就会报错
更多推荐



所有评论(0)