考虑代码:
#include <stdio.h>
class Base {
public:
virtual void gogo(int a){
printf(" Base :: gogo (int) \n");
};
virtual void gogo(int* a){
printf(" Base :: gogo (int*) \n");
};
};
class Derived : public Base{
public:
virtual void gogo(int* a){
printf(" Derived :: gogo (int*) \n");
};
};
int main(){
Derived obj;
obj.gogo(7);
}
得到这个错误:
> g ++ -pedantic -Os test.cpp -o测试 test.cpp:在函数“ int main()”中: test.cpp:31:错误:没有匹配的函数可以调用`Derived :: gogo(int)' test.cpp:21:注意:候选对象是:virtual void Derived :: gogo(int *) test.cpp:33:2:警告:文件末尾没有换行符 >退出代码:1
在这里,派生类的功能使基类中所有具有相同名称(不是签名)的功能黯然失色。不知何故,C ++的这种行为看起来并不正常。不是多态的。
obj.Base::gogo(7);
通过调用隐藏函数仍然可以使用。