目录
1.函数的默认参数
语法:返回值类型 函数名 (参数 = 默认值){ }
注意事项:
(1)如果某个位置已经有了默认参数,那么从这个位置往后,都必须有默认参数
(2)声明和实现只能一个有默认参数,声明和实现均含有默认参数,编译器将不知道按照哪个默认参数操作,编译会报错
代码示例:
#include<iostream>
#include<vector>
#include<array>
using namespace std;
// 如果未传入数据,就采用默认值
int func(int a, int b = 20, int c = 30)
{
return a + b + c;
}
//1. 如果某个位置已经有了默认参数,那么从这个位置往后,都必须有默认参数
int func2(int a, int b = 20, int c) // 编译报错
{
return a + b + c;
}
//2. 声明和实现只能一个有默认参数
int func2(int a = 10, int b = 20);
int func2(int a = 10, int b = 20) // 声明和实现均含有默认参数,编译器将不知道按照哪个默认参数操作,编译会报错
{
return a + b;
}
int main()
{
cout << func(10, 30) << endl;
cout << func2(10, 30) << endl;
return 0;
}
2.函数占位参数
C++函数的形参可以有占位参数,用来占位,调用函数时必须填补该位置。
语法: 返回值类型 函数名 (数据类型){ }
void func(int a, int){ }
占位参数可以有默认参数
void func(int a, int = 10){ }
3.函数重载
作用:函数名可以相同,提高复用性。
函数重载的满足条件:
- 同一个作用域下
- 函数名称相同
- 函数参数类型不同,个数不同或者顺序不同
注意:函数的返回值不可以作为函数重载的条件
代码示例
#include<iostream>
#include<vector>
#include<array>
using namespace std;
// 函数重载
//函数重载的满足条件:
//(1) 同一个作用域下
//(2) 函数名称相同
//(3) 函数参数类型不同,个数不同或者顺序不同
//注意:函数的返回值不可以作为函数重载的条件
void func()
{
cout << "func " << endl;
}
void func(int a)
{
cout << "func(int a) " << endl;
}
void func(double a)
{
cout << "func(double a) " << endl;
}
void func(int a, double b)
{
cout << "func(int a, double b) " << endl;
}
void func(double a, int b)
{
cout << "func(double a, int b) " << endl;
}
//int func(double a, int b) //返回值不可以作为函数重载的条件
//{
// cout << "func(double a, int b) " << endl;
//}
int main()
{
//个数不同
func();
//类型不同
func(10);
func(3.14);
//顺序不同
func(10, 3.14);
func(3.14, 10);
return 0;
}
4. 函数重载两种情况下的注意事项
(1)引用作为函数重载的条件。
(2)函数重载碰到函数默认值。
代码示例
#include<iostream>
#include<vector>
#include<array>
using namespace std;
// 函数重载
//引用作为函数重载的条件
void func(int &a)
{
cout << "func(int& a)" << endl;
}
void func(const int &a)
{
cout << "func(const int& a)" << endl;
}
//函数重载碰到函数默认值
void func2(int a, int b = 10)
{
cout << "func2(int& a)" << endl;
}
void func2(int a)
{
cout << "func2(int& a)" << endl;
}
int main()
{
int a = 10;
func(a); // 调用func(int &a)
func(10); // 调用func(const int &a)
//func2(a); // 两个func2均可以调用,出现二义性,编译报错,函数重载尽量避免使用默认参数
return 0;
}