函数高级
函数默认参数
在 C++ 中,函数的形参列表中的形参是可以由默认值的
注意1:如果函数的参数中,某个位置已经有了默认参数,那么从这个默认参数的位置开始到参数列表结束中的所有参数,都必须有默认值
注意2:函数声明和函数实现中,默认参数只能存在其中一个,要么是在函数声明,要么是在函数实现
语法:
返回值类型 函数名 (参数 = 默认值) {}
xxxxxxxxxx
using namespace std;
//函数默认参数
int func01(int a,int b,int c) {
return a + b + c;
}
//注意
//1、如果函数的参数中某个位置已经有了默认参数,那么从这个默认参数的位置往后
//从这个默认参数的位置从左到右的所有参数,都必须要有默认值
int func02(int a,int b = 40,int c =90) {
return a + b + c;
}
//2、如果函数声明中有默认参数,函数实现就不能有默认参数
//参数默认值写在声明中
int func03(int a = 10,int b = 40,int c = 90);
int func03(int a ,int b,int c) {
return a + b + c;
}
//参数默认值写在实现中
int func04(int a,int b,int c);
int func04(int a = 10,int b = 40,int c = 90) {
return a + b + c;
}
int main() {
int c;
c = func01(10,20,30); //当函数参数没有默认值时,必须传入所有对应的参数
cout << "func01 函数 c 的值为:" << c << '\n' << endl;
c = func02(10); //当函数参数有默认值时,可以省略传入有默认值的参数
cout << "func02 函数参数为默认 c 的值为:" << c << '\n' << endl;
c = func02(10,20,30); //当函数参数有默认值时,可以选择传入参数,代替默认值
cout << "func02 函数参数为传入参数 c 的值为:" << c << '\n' << endl;
c = func03();
cout << "func03 函数 c 的值为:" << c << '\n' << endl;
c = func04();
cout << "func04 函数 c 的值为:" << c << '\n' << endl;
system("pause");
return 0;
}
运行

函数占位参数
C++ 中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:
返回值类型 函数名 (数据类型){}
xxxxxxxxxx
using namespace std;
//占位参数
void func01(int a, int) {
cout << "func 已执行" << endl;
}
//同样,占位参数可以有默认值
void func02(int a,int = 20) {
cout << "func02 已执行" << endl;
}
int main() {
func01(10,10);
func02(10);
system("pause");
return 0;
}
运行

函数重载
作用:函数名可以相同,提高复用性
函数重载满足条件:
-
同一个作用域下
-
函数名称相同
-
函数参数 类型不同 或者 个数不同 或者 顺序不同
注意: 函数的返回值不可以作为函数重载的条件
x
using namespace std;
//函数重载
//可以让函数名相同,提高复用性
//函数重载的满足条件
//1、同一个作用域下
//2、函数名称相同
//3、函数参数类型不同、或者个数不同、或者顺序不同
//int类型参数的函数
void func(int a) {
cout << "int 类型参数的函数被调用了" << '\n' << endl;
}
//参数类型不同的函数
void func(double a) {
cout << "参数类型不同的函数被调用了" << '\n' << endl;
}
//参数个数不同的函数
void func(int a,double b) {
cout << "参数个数不同的函数被调用了" << '\n' << endl;
}
//参数顺序不同的函数
void func(double a,int b) {
cout << "参数顺序不同的函数被调用了" << '\n' << endl;
}
//函数的返回值类型不可以作为函数重载的条件
//int func(int a){}
int main() {
//int类型参数的函数
func(1);
//参数类型不同的函数
func(1.1);
//参数个数不同的函数
func(1,1.1);
//参数顺序不同的函数
func(1.1, 1);
system("pause");
return 0;
}
运行

函数重载注意事项
-
引用作为重载条件
-
函数重载碰到函数默认参数
xxxxxxxxxx
#include <iostream>
using namespace std;
//函数重载的注意事项
//1、引用作为重载的条件
void func04(int &a) {
cout << "引用参数的 func 函数被调用了" << '\n' << endl;
}
void func04(const int &a) {
cout << "const 修饰的引用参数 func 被调用了" << '\n' << endl;
}
//2、函数重载碰到默认参数
//void func02(int a = 10) {}
//void func02(int a) {}
int main() {
int a = 10;
func04(a);
func04(10);
system("pause");
return 0;
}
运行
