It is okey to override a non-virtual function in a derived class. However, my question is that is there anything I should be aware of so that I won't do anything bad in that situation?
Another question is like this,

class base
{
public:
void f(int);
};

class derived : public base
{
public:
void f(float);
};

usually we will get a warning: Derived::f(float) hides Base::f(int). Why?