#include <iostream>
#include <memory>
#include <vector>
using namespace std;
struct Base
{
virtual void foo()
{
cout<<"In parent\n";
}
};
struct Child1:public Base
{
void foo()
{
cout<<"In Child1\n";
}
void bar(){
cout<<"In Child1 Bar \n";
}
};
struct Child2 : public Base
{
void foo()
{
cout<<"In Child2\n";
}
};
int main()
{
Child1* ch1=new Child1;
Child2* ch2=new Child2;
std::vector<Base*> vec;
vec.push_back(ch1);
vec.push_back(ch2);
vec[0]->foo();//khorooji: In child 1
Child1* ch=dynamic_cast<Child1*>(vec[0]);
ch->bar(); // khorooji : In child1 Bar
vec[1]->foo();//khorooji : In child2
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEJhc2UKewogICAgdmlydHVhbCB2b2lkIGZvbygpCiAgICB7CiAgICAgICAgY291dDw8IkluIHBhcmVudFxuIjsKICAgIH0KfTsKCnN0cnVjdCBDaGlsZDE6cHVibGljIEJhc2UKewogICAgdm9pZCBmb28oKQogICAgewogICAgICAgIGNvdXQ8PCJJbiBDaGlsZDFcbiI7CiAgICB9CiAgICB2b2lkIGJhcigpewogICAgICAgICBjb3V0PDwiSW4gQ2hpbGQxIEJhciBcbiI7CiAgICB9Cn07CnN0cnVjdCBDaGlsZDIgOiBwdWJsaWMgQmFzZQp7CiAgICB2b2lkIGZvbygpCiAgICB7CiAgICAgICAgY291dDw8IkluIENoaWxkMlxuIjsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgQ2hpbGQxKiBjaDE9bmV3IENoaWxkMTsKICAgIENoaWxkMiogY2gyPW5ldyBDaGlsZDI7CgogICAgc3RkOjp2ZWN0b3I8QmFzZSo+IHZlYzsKICAgIHZlYy5wdXNoX2JhY2soY2gxKTsKICAgIHZlYy5wdXNoX2JhY2soY2gyKTsKCiAgICB2ZWNbMF0tPmZvbygpOy8va2hvcm9vamk6IEluIGNoaWxkIDEKCiAgICBDaGlsZDEqIGNoPWR5bmFtaWNfY2FzdDxDaGlsZDEqPih2ZWNbMF0pOwogICAgY2gtPmJhcigpOyAvLyBraG9yb29qaSA6IEluIGNoaWxkMSBCYXIKCiAgICB2ZWNbMV0tPmZvbygpOy8va2hvcm9vamkgOiBJbiBjaGlsZDIKfQo=