function overloading in c++ polymorphism