#include <iostream>
using namespace std;
class Parent{
public:
Parent(){};
virtual~Parent(){
cout << "destructor parent\n";
}
virtual void fn(){
cout << "call parent fn\n";
}
};
class Child:public Parent{
public:
~Child(){
cout << "destructor child\n";
}
virtual void fn(){
cout << "call child fn\n";
}
};
void test(Parent &obj){
obj.fn();
}
int main() {
Parent obj1;
Child obj2;
Parent *obj3 = new Child;
test(obj1);
test(obj2);
test(*obj3);
delete obj3;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBQYXJlbnR7CglwdWJsaWM6CgkJUGFyZW50KCl7fTsKCQl2aXJ0dWFsflBhcmVudCgpewoJCQljb3V0IDw8ICJkZXN0cnVjdG9yIHBhcmVudFxuIjsKCQl9CgkJdmlydHVhbCB2b2lkIGZuKCl7CgkJCWNvdXQgPDwgImNhbGwgcGFyZW50IGZuXG4iOwoJCX0KfTsKY2xhc3MgQ2hpbGQ6cHVibGljIFBhcmVudHsKCXB1YmxpYzoKCQl+Q2hpbGQoKXsKCQkJY291dCA8PCAiZGVzdHJ1Y3RvciBjaGlsZFxuIjsKCQl9CgkJdmlydHVhbCB2b2lkIGZuKCl7CgkJCWNvdXQgPDwgImNhbGwgY2hpbGQgZm5cbiI7CgkJfQp9Owp2b2lkIHRlc3QoUGFyZW50ICZvYmopewoJb2JqLmZuKCk7Cn0KaW50IG1haW4oKSB7CglQYXJlbnQgb2JqMTsKCUNoaWxkIG9iajI7CglQYXJlbnQgKm9iajMgPSBuZXcgQ2hpbGQ7Cgl0ZXN0KG9iajEpOwoJdGVzdChvYmoyKTsKCXRlc3QoKm9iajMpOwoJZGVsZXRlIG9iajM7CglyZXR1cm4gMDsKfQ==