Function lookup stops at a scope. In the case of class hierarchies, this means that a function?either virtual or not?declared in a derived class can hide a virtual member function with the same name in its base class, even if the functions’ signatures differ. For example:
class B { public: virtual void f(int); }; class D : public B { public: void f(void*); }; D d ; d.f(7) //#1 compilation error
The statement d.f(7) is in error although class B has a function called f() which takes int. To see why this is an error, let