#include<iostream>
class Base
{
public :
virtual double Function( int i) const { std:: cout << "\n In Base int version" ; }
} ;
class SubClass : public Base
{
public :
virtual double Function( int i) const { std:: cout << "\n In Derived int version" ; }
double Function( std:: string str) const { std:: cout << "\n In Derived string version" ; }
double Function( double i) const { std:: cout << "\n In 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 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CmNsYXNzIEJhc2UKewpwdWJsaWM6CiAgICB2aXJ0dWFsIGRvdWJsZSBGdW5jdGlvbihpbnQgaSkgY29uc3R7c3RkOjpjb3V0PDwiXG5JbiBCYXNlIGludCB2ZXJzaW9uIjt9Cn07CgpjbGFzcyBTdWJDbGFzcyA6IHB1YmxpYyBCYXNlCnsKcHVibGljOgogICAgdmlydHVhbCBkb3VibGUgRnVuY3Rpb24oaW50IGkpIGNvbnN0e3N0ZDo6Y291dDw8IlxuSW4gRGVyaXZlZCBpbnQgdmVyc2lvbiI7fQogICAgZG91YmxlIEZ1bmN0aW9uKHN0ZDo6c3RyaW5nIHN0cikgY29uc3R7c3RkOjpjb3V0PDwiXG5JbiBEZXJpdmVkIHN0cmluZyB2ZXJzaW9uIjt9CiAgICBkb3VibGUgRnVuY3Rpb24oZG91YmxlIGkpIGNvbnN0IHtzdGQ6OmNvdXQ8PCJcbkluIERlcml2ZWQgZG91YmxlIHZlcnNpb24iO30KfTsKCmludCBtYWluKCkKewogICAgU3ViQ2xhc3Mgb2JqOwogICAgb2JqLkZ1bmN0aW9uKDEwKTsKICAgIG9iai5GdW5jdGlvbigxMC4xKTsKICAgIG9iai5GdW5jdGlvbigiSGVsbG8iKTsgCgogICAgQmFzZSBCb2JqOwogICAgQm9iai5GdW5jdGlvbigxMC4yKTsKCiAgICBCYXNlICpwdHIgPSBuZXcgQmFzZTsKICAgIHB0ci0+RnVuY3Rpb24oMTAuNSk7CgogICAgQmFzZSAqcHRyMiA9IG5ldyBTdWJDbGFzczsgCiAgICBwdHIyLT5GdW5jdGlvbigxMCk7CiAgICBwdHIyLT5GdW5jdGlvbigxMC41KTsKICAgCiAgICByZXR1cm4gMDsKfQ==