成员函数隐藏与函数重载、覆盖不一样,隐藏是指派生类的成员函数遮蔽了与其同名的基类成员函数。规则如下:
派生类的函数与基类的函数同名,但是参数列表有所差异。此时,不论有无virtual关键字,基类的函数在派生类中将被隐藏。
派生类的函数与基类的函数名相同,参数列表相同,但是基类函数没有virtual关键字。此时,基类的函数在派生类中将被隐藏。
class Base
{
public:
void f(int x);
};
class Derived:public Base
{
public:
void f(char *str);
};
void Test()
{
Derived *pd = new Derived;
pd->f(10); //error 派生类中的f(char*)隐藏了基类的f(int)了
}