函数重载基本就是同名函数不同功用,可以提高代码的重用性。
函数重载的条件
- 在同一作用域下
如果不在同一作用域下会调用优先级高的函数 - 函数名相同
不相同咋重载。。 - 参数个数 类型 顺序不同
就靠这个判断调用哪个函数
参数个数不同的重载
void func()
{
cout << "func 1";
}
void func(int x)
{
cout << "func 2";
}
int main()
{
cout << func() <<" " << func(10);
}
输出 func 1 func 2
c ++ 通过不同数量的参数判断调用哪个函数
参数类型不同的重载
void func(double x)
{
cout << "func 1";
}
void func(int x)
{
cout << "func 2";
}
int main()
{
cout << func(1.0) <<" " << func(10);
}
输出 func 1 func 2
通过参数类型的不同判断调用哪个函数
参数顺序不同
void func4(int a , double x)
{
cout << "23333" << endl;
}
void func4(double x , int a)
{
cout << "23333333" << endl;
}
int main()
{
func4(1 , 1.0);
func4(1.0 , 1);
}
输出
23333
23333333
通过参数顺序不同判断调用哪个函数
含有引用的重载
void func2(int &a)
{
cout << "非const引用" << endl;
}
void func2(const int& a)
{
cout << "const 引用" << endl;
}
int main()
{
func2(a);
func2(3);
}
输出
非const引用
const 引用
传入3时会调用第二个
因为 int &a = 3
非法
注意! 含有默认值的重载
含有默认值的函数重载有可能会产生歧义 比如
void func3(int a)
{
cout << "23333" << endl;
}
void func3(int a , int b = 10)
{
cout << "23333333" << endl;
}
int main()
{
func3(233); //编译器报错
}