#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();
		}
	}
}