在C++中,当你使用一个包含了重载方法的类时,并且当你继承和重写这个方法后,你必须重写所有重载的方法。
例子:
class FirstClass {
public:
virtual void MethodA (int);
virtual void MethodA (int, int);
};
void FirstClass::MethodA (int i) {
std::cout << “ONE!!\n”;
}
void FirstClass::MethodA (int i, int j) {
std::cout << “TWO!!\n”;
}
这个简单类有两个方法(一个重载方法),如果你想重写只有一个参数的版本,你可以这样:
class SecondClass : public FirstClass {
public:
void MethodA (int);
};
void SecondClass::MethodA (int i) {
std::cout << “THREE!!\n”;
}
void main () {
SecondClass a;
a.MethodA (1);
a.MethodA (1, 1);
}
然而,第二个调用会失败,因为两个参数的方法MethodA 是不可见的。这个就是名字隐藏。
class father{
void f(int a){cout <<"father\n";}
};
class child:public father{
void f(int a,int b){cout <<"child\n";}
};
int main()
{
father f;
child ch;
ch.f(2);//编译不通过
ch.f(2,3);
return 0;
}
同样地父类中的函数被隐藏了