在C++中同名函数存在如下三种关系:
- 函数重载/重定义:指的是在同作用域下,由函数参数列表(参数类型、参数个数、参数顺序)提供支持的多个同名函数同时存在的一种关系;
int sum(int a,int b)
{
return a+b;
}
int sum(int a,int b,int c)
{
return a+b+c;
}
double sum(double a,double b)
{
return a+b;
}
float sum(float a,float b)
{
return a+b;
}
注意一点:函数返回值并不对函数重载提供支持,因为在函数的调用点与函数匹配时只能推演函数名、函数参数列表,看不见返回值类型。另外常函数也是函数重载的一种形式。
- 隐藏:在类的不同作用域下,准确的说是基类与派生类、父类与子类的关系下,子类中如果有和父类同名的函数,则继承之后的子类的同名函数完全会将该类的基类部分同名函数隐藏起来,简单来说就是基类的同名函数存在,但是派生类对象不可见的情况,派生类对象如果调用该同名函数,则调用的是派生类中的那个同名函数;当然类的成员变量也遵循这种隐藏关系;如果可以去调用基类中定义的同名函数的话,就要在函数名前加上基类作用域Base::函数名();
class A{
public:
A(int a):a(ma){}
void show()
{
cout<<"a="<<