所谓名字隐藏是指父类中有一组重载函数,子类在继承父类时如果覆盖了这组重载函数中的任意一个,则其余没有被覆盖的同名函数在子类中是不可见的。
class Base{
public:
virtual void printf(int a){cout<<"Base print int"<<a<<endl;}
virtual void printf(char a){cout<<"Base print char"<<a<<endl;}
virtual void printf(double a){cout<<"Base print double"<<a<<endl;}
};
class Derived:public Base{
public:
void printf(int a){cout<<"Derived print int"<<a<<endl;}
};
Derived d;
d.print(10);
d.print(5.88);
d.print('d');
Derived类只覆盖了Base类中的一组重载函数中的一个,因此参数类型为char和double的两个重载函数对于Dervied类是不可见的。但是由于有内置类型转换,故最终输出的结果为:
Derived print int 10
Derived print int 5
Derived print int 100