目录
函数默认参数
形参列表中的形参可以有默认值
语法:返回值类型 函数名 (参数 = 默认值) {}
注意:
- 某位置为默认参数,其之后的所有参数都必须为默认参数
- 如果函数声明有默认参数,那么函数实现就不能有默认参数
#include <iostream>
using namespace std;
int func2(int a, int b=5, int c=5);
int func2(int a, int b, int c)
{
return a+b+c;
}
int func(int a, int b=5,int c=8)
{
return a+b+c;
}
int main(void)
{
cout << func(10) << endl;
cout << func2(10) << endl;
return 0;
}
函数的占位参数
函数形参列表里使用占位参数做占位,调用函数时必须填补该位置
语法:返回值类型 函数名 (数据类型) {}
#include <iostream>
using namespace std;
void func(int a, int)
{
cout << "this is func" << endl;
}
int main()
{
func(10,20); //占位参数必须补充
cout << "Hello world!" << endl;
return 0;
}
函数重载
函数名可以相同,提高复用性
条件:
- 同一个作用域
- 函数名称相同
- 函数参数类型不同 或 个数不同 或 顺序不同
注意:函数返回值类型不可以作为函数重载的条件
#include <iostream>
using namespace std;
void func(int a , double b)
{
cout << "func(int a , double b)" << endl;
}
void func(int a)
{
cout << "func(int a)" << endl;
}
void func(double a)
{
cout << "func(double a)" << endl;
}
void func(double a, int b)
{
cout << "func(double a, int b)" << endl;
}
int main()
{
func(10);
func(3.14);
func(10,3.15);
func(3.15,10);
return 0;
}
注意事项:
- 引用作为重载条件
#include <iostream>
using namespace std;
//引用作为重载条件
void func(int &a)
{
cout << "func(int &a))" << endl;
}
void func(const int &a)
{
cout << "func(const int &a)" << endl;
}
int main()
{
int a = 10;
func(a);
func(10);
return 0;
}
- 函数重载碰到函数默认参数
#include <iostream>
using namespace std;
void func(int a, int b =10)
{
cout << "func(int a, int b =10)" << endl;
}
void func(int a)
{
cout << "func(int a)" << endl;
}
int main()
{
func(10); //报错,二义性
return 0;
}
||=== Build: Debug in studycpp (compiler: GNU GCC Compiler) ===|
F:\qt_study\studycpp\main.cpp||In function 'int main()':|
F:\qt_study\studycpp\main.cpp|17|error: call of overloaded 'func(int)' is ambiguous|
F:\qt_study\studycpp\main.cpp|5|note: candidate: 'void func(int, int)'|
F:\qt_study\studycpp\main.cpp|10|note: candidate: 'void func(int)'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
函数重载时,尽量不使用默认参数!!!
推荐文章:[C++核心编程](二):引用