Przykład

class Base {
public:
void fnc();
};

class Derived: public Base {
public:
void fnc(){}
};

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();//wywołuje funkcję Base::fnc()
derivedPtr->fnc();  //wywołuje funkcję Derived::fnc()

return 0;
}

Rozwiązanie
Nie przesłaniaj funkcji innych niż wirtualne. Zmień swój projekt, aby nie korzystać  z klasy bazowej, lub zmień funkcję klasy bazowej na wirtualną, aby zapewnić działanie polimorficzne.


class Base {
public:
virtual void fnc();
};

class Derived: public Base {
public:
void fnc(){}
};

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();//wywołuje funkcję 
Derived::fnc()
derivedPtr->fnc();  //wywołuje funkcję Derived::fnc()

return 0;
}