函数默认参数
在 C++ 中,函数的形参列表是可以有默认值的
语法:返回值类型 函数名 ( 参数 = 默认值 ) { 代码体 }
重点1:如果某个位置参数有默认值,那么从这个参数往后都要有默认值
#include <iostream>
using namespace std;
// 错误示例
//void func1(int a, int b = 10, int c) {
// pass
//}
// 正确示例
void func2(int a, int b = 10, int c = 20) {
cout << a + b + c << endl;
}
int main() {
int num1 = 1;
int num2 = 2;
int num3 = 3;
// 调用函数 func1
//func1(num1,num2,num3) // Error!
// 调用函数 func2
func2(num1); // 31
system("pause");
return 0;
}
重点2:函数声明和函数实现只能有一处存在默认值
#include <iostream>
using namespace std;
// 函数声明
void func(int a, int b = 10, int c = 20);
int main() {
int num = 1;
// 调用函数 func
func(num); // 31
system("pause");
return 0;
}
// 函数实现
void func(int a, int b, int c) {
cout << a + b + c << endl;
}
函数的占位参数
C++ 中函数的形参列表里可以存在占位参数,用来做占位,调用该函数时必须填补该位置
语法:返回值类型 函数名 ( 数据类型 ) { 代码体 }
重点1:占位参数必须填补
#include <iostream>
using namespace std;
void func(int a, int) {
cout << a << endl;
}
int main() {
// 调用函数 func
func(1, 2); // 1
system("pause");
return 0;
}
重点2:占位参数可以存在默认值
#include <iostream>
using namespace std;
// 占位参数 int 没有默认值
void func1(int a, int) {
cout << a << endl;
}
// 占位参数 int 有默认值
void func2(int a, int = 10) {
cout << a << endl;
}
int main() {
// 调用函数 func1
func1(1, 2); // 1
// 调用函数 func2
func2(3, 4); // 3
system("pause");
return 0;
}
函数重载
作用:函数名相同,可以提高复用性
条件:同一个作用域下;函数名相同;函数参数类型不同、个数不同或者顺序不同
重点1:函数返回值不同不能作为重载的条件
#include <iostream>
using namespace std;
// 下列函数重载条件不符合
//void func() {
// cout << "void" << endl;
//}
//int func() {
// cout << "int" << endl;
//}
int main() {
// func(); // Error!
system("pause");
return 0;
}
示例1:函数参数类型不同的重载
#include <iostream>
using namespace std;
void func(int a) {
cout << a << endl;
}
void func(double a) {
cout << a << endl;
}
int main() {
func(2); // 2
func(2.1); // 2.1
system("pause");
return 0;
}
示例2:函数参数个数不同的重载
#include <iostream>
using namespace std;
void func(int b, int a) {
cout << a << endl;
}
void func(int a) {
cout << a << endl;
}
int main() {
func(2); // 2
func(1, 2); // 2
system("pause");
return 0;
}
示例3:函数参数顺序不同的重载
#include <iostream>
using namespace std;
void func(int b, double a) {
cout << a << endl;
}
void func(double a, int b) {
cout << a << endl;
}
int main() {
func(1, 2.1); // 2.1
func(2.1, 1); // 2.1
system("pause");
return 0;
}
重点2:引用作为重载条件
#include <iostream>
using namespace std;
void func(int &a) {
cout << a << endl;
}
void func(const int &a) {
cout << a << endl;
}
int main() {
// 调用第一个函数(只能传递变量)
int num = 10;
func(num); // 10
// 调用第二个函数(直接传递数据)
func(2); // 2
system("pause");
return 0;
}
重点3:函数重载碰到函数默认参数
#include <iostream>
using namespace std;
void func(int a) {
cout << a << endl;
}
void func(int a, int b = 10) {
cout << a << endl;
}
int main() {
// 此处调用不明确,出现二义性,只能尽量避免
// func(10); // Error!
system("pause");
return 0;
}