I usually use pure virtual functions for those methods that are required by my code to work well. Therefore, I create interfaces and then other users implement their derived
It is not overriding as the function signatures are different. According to polymorphism rule to override a function the function signatures and types should be same.
In this case these functions are different.
virtual void foo(int,double)=0;
virtual void foo(int, double, double);