#include <iostream>
using namespace std;
class base1
{
public:
int a;
virtual int reset(){
a=0;
return a;
}
};
class derived1: public base1
{
public:
int b;
int reset(){
b=0;
return b;
}
};
template <class T>
class templateClass{
public:
T *P;
T& operator = (templateClass &b )
{
this.p = reinterpret_cast<T>(b.p);
return *this;
}
void resetMyself(){
P->reset();
}
};
int main() {
// your code goes here
templateClass<base1> *p = new templateClass<base1> () ;
templateClass<derived1> *q = new templateClass<derived1>() ;
p=q;
p->resetMyself();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBiYXNlMQp7CglwdWJsaWM6CgkJaW50IGE7CgkJdmlydHVhbCBpbnQgcmVzZXQoKXsKCQkJYT0wOwoJCQlyZXR1cm4gYTsKCQl9Cn07CgpjbGFzcyBkZXJpdmVkMTogcHVibGljIGJhc2UxCnsKCXB1YmxpYzoKCQlpbnQgYjsKCQlpbnQgcmVzZXQoKXsKCQkJYj0wOwoJCQlyZXR1cm4gYjsKCQl9CgkJCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgdGVtcGxhdGVDbGFzc3sKcHVibGljOgpUICpQOwoJCglUJiBvcGVyYXRvciA9ICh0ZW1wbGF0ZUNsYXNzICZiICkKCXsKCQl0aGlzLnAgPSByZWludGVycHJldF9jYXN0PFQ+KGIucCk7CgkJcmV0dXJuICp0aGlzOwoJfQoJCgl2b2lkIHJlc2V0TXlzZWxmKCl7CgkJUC0+cmVzZXQoKTsKCX0KfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJdGVtcGxhdGVDbGFzczxiYXNlMT4gKnAgPSBuZXcgdGVtcGxhdGVDbGFzczxiYXNlMT4gKCkgOwoJdGVtcGxhdGVDbGFzczxkZXJpdmVkMT4gKnEgPSBuZXcgdGVtcGxhdGVDbGFzczxkZXJpdmVkMT4oKSA7CglwPXE7CgkKCXAtPnJlc2V0TXlzZWxmKCk7CgkKCXJldHVybiAwOwp9