C++核心编程
3. 函数提高
3.1 函数默认参数
在C++中,函数的形参列表中形参可以有默认值。
语法:返回值类型 函数名 (参数=默认值){}
如果我们传入数据就用自己的数据,如果没有就用默认值
**注意事项
- 如果某个位置有了默认参数,那么从这个位置往后,从左到右都必须要有默认值
- 如果函数的声明有默认参数,那么函数的实现就不能有默认参数。声明和实现只能有一个有默认参数
编译器会不知道该用那个默认参数,即使声明和实现默认参数相同运行也会出错。
3.2 函数占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置。
语法:返回值类型 函数名 (数据类型){}
占位参数也可以有默认参数
3.3 函数重载
3.3.1 函数重载概述
作用:函数名可以相同,提高复用性
函数重载满足条件:
- 同一作用域下
- 函数名称相同
- 函数参数类型不同或者个数不同或者顺序不同
函数的返回值不可以作为函数重载的条件
3.3.2 函数重载注意事项
- 引用作为重载的条件
#include <iostream>
#include<string>
using namespace std;
void fun(int& a)
{
cout << " fun(int& a)调用" << endl;
}
void fun(const int& a)
{
cout << "fun(const int& a)调用" << endl;
}
int main()
{
int a = 10;
fun(10);
system("pause");
return 0;
}
C++
运行后
调用fun(const int&a),因为引用必须要有一个合法的空间,要不堆区要不栈区,10是在常量区。
如果想要调用fun(int&a)
int main()
{
int a = 10;
fun(a);
system("pause");
return 0;
}
C++
把主函数的fun(10),改为fun(a)
加const和不加const可以作为引用的重载条件
2. 函数重载碰上默认参数
void fun2(int a, int b = 10)
{
cout << " fun2(int a, int b = 10)的调用" << endl;
}
void fun2(int a)
{
cout << "fun2(int a)的调用" << endl;
}
int main()
{
fun2(10);
}
C++
出现二义性报错,尽量避免出现这种情况
在这个案例中如果传入两个参数,就可以避免这种情况
int main()
{
fun2(10,20);
}
C++