#include <iostream>
#include <vector>
using namespace std;
class Glowna
{
int a;
int b;
public:
Glowna(int z, int y):a(z),b(y) {}
virtual int getA() const final { return a; }
};
class Pochodna1 : public Glowna
{
int c;
public:
Pochodna1():Glowna(1,2),c(3) {}
};
class Pochodna2 : public Glowna
{
int d;
public:
Pochodna2():Glowna(4,5),d(6) {}
int Metoda() { cout << "metoda\n"; return d; }
};
class Pochodna3 : public Glowna
{
int e;
public:
Pochodna3():Glowna(7,8),e(9) {}
};
int main()
{
vector<Glowna*> tablica;
tablica.push_back(new Pochodna1());
tablica.push_back(new Pochodna2());
tablica.push_back(new Pochodna3());
for (int i = 0; i < 3; i++)
{
if (tablica[i]->getA() == 4)
{
Pochodna2* p = (Pochodna2*)tablica[i];
p->Metoda();
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgR2xvd25hCnsKCWludCBhOwoJaW50IGI7CnB1YmxpYzoKCUdsb3duYShpbnQgeiwgaW50IHkpOmEoeiksYih5KSB7fQoJdmlydHVhbCBpbnQgZ2V0QSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGE7IH0KfTsKIApjbGFzcyBQb2Nob2RuYTEgOiBwdWJsaWMgR2xvd25hCnsKCWludCBjOwpwdWJsaWM6CglQb2Nob2RuYTEoKTpHbG93bmEoMSwyKSxjKDMpIHt9Cn07CiAKY2xhc3MgUG9jaG9kbmEyIDogcHVibGljIEdsb3duYQp7CglpbnQgZDsKcHVibGljOgoJUG9jaG9kbmEyKCk6R2xvd25hKDQsNSksZCg2KSB7fQoJaW50IE1ldG9kYSgpIHsgY291dCA8PCAibWV0b2RhXG4iOyByZXR1cm4gZDsgfQp9OwogCmNsYXNzIFBvY2hvZG5hMyA6IHB1YmxpYyBHbG93bmEKewoJaW50IGU7CnB1YmxpYzoKCVBvY2hvZG5hMygpOkdsb3duYSg3LDgpLGUoOSkge30KfTsKIAppbnQgbWFpbigpCnsKCXZlY3RvcjxHbG93bmEqPiB0YWJsaWNhOwoJdGFibGljYS5wdXNoX2JhY2sobmV3IFBvY2hvZG5hMSgpKTsKCXRhYmxpY2EucHVzaF9iYWNrKG5ldyBQb2Nob2RuYTIoKSk7Cgl0YWJsaWNhLnB1c2hfYmFjayhuZXcgUG9jaG9kbmEzKCkpOwoJCglmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKCXsKCQlpZiAodGFibGljYVtpXS0+Z2V0QSgpID09IDQpCgkJewoJCQlQb2Nob2RuYTIqIHAgPSAoUG9jaG9kbmEyKil0YWJsaWNhW2ldOwoJCQlwLT5NZXRvZGEoKTsKCQl9Cgl9Cn0=