在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;
}
同樣地父類中的函數被隱藏了