#include<iostream>
class Base
{
public:
    virtual double Function(int i) const{std::cout<<"\nIn Base int version";}
};

class SubClass : public Base
{
public:
    virtual double Function(int i) const{std::cout<<"\nIn Derived int version";}
    double Function(std::string str) const{std::cout<<"\nIn Derived string version";}
    double Function(double i) const {std::cout<<"\nIn Derived double version";}
};

int main()
{
    SubClass obj;
    obj.Function(10);
    obj.Function(10.1);
    obj.Function("Hello"); 

    Base Bobj;
    Bobj.Function(10.2);

    Base *ptr = new Base;
    ptr->Function(10.5);

    Base *ptr2 = new SubClass; 
    ptr2->Function(10);
    ptr2->Function(10.5);
   
    return 0;
}