# include class A { public: A() { printf("A is here!\n"); } ~A() { printf("A is leaving!\n"); } }; class B : public A { public: B() { printf("B is here!\n"); } ~B() { printf("B is leaving!\n"); } }; template void Func( T * obj ) { printf( "Func gia T\n" ); } void Func( B * obj ) { printf( "Func gia B\n" ); } void Func( A * obj ) { printf( "Func gia A\n" ); } int main( void ) { A* lala = new B(); Func(lala); delete lala; return 0; }