c++从入门到精通——函数重载
在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。
实现函数重载的条件
- 同一个作用域
- 参数个数不同
- 参数类型不同
- 参数顺序不同
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(double a , int b)
{
cout << "有参数的func(double a ,int b)" << endl;
}
void func(int a, double b)
{
cout << "有参数的func(int a ,double b)" << endl;
}
测试
void test01()
{
//func(1.1,3);
func(1, 3.14);
}
结果
有参数的func(int a ,double b)
注意,返回值不作为函数重载依据
思考:为什么函数返回值不作为重载条件呢?
当编译器能从上下文中确定唯一的函数的时,如int ret = func(),这个当然是没有问题的。然而,我们在编写程序过程中可以忽略他的返回值。那么这个时候,一个函数为
void func(int x);另一个为int func(int x); 当我们直接调用func(10),这个时候编译器就不确定调用那个函数。所以在c++中禁止使用返回值作为重载的条件。
引用和const
//引用的重载版本
void func3(int &a) //引用必须要引合法的内存空间
{
cout << " int &a" << endl;
}
void func3(const int &a) //const也是可以作为重载的条件 int tmp = 10; const int &a = tmp;
{
cout << "const int &a" << endl;
}
运行
void test03()
{
int a = 10;
func3(a);
}
输出int &a
。
void test03()
{
func3(10);
}
输出const int &a
。