#include <iostream>
#include <vector>

class Foo
{
public:
	Foo(int a, int b) : a(a), b(b) {}
	int a, b;
};

class Bar : public Foo
{
public:
	Bar(int a, int b, int c, int d, int e, int f) :
		Foo(a, b), c(c), d(d), e(e), f(f) {}
	void print()
	{
		std::cout << a << " " << b << " " << c << " " << d << " " << e << " " << f << '\n';
	}
	int c, d, e, f;
};


int main(int argc, char** argv)
{
	Bar bar0(0, 1, 2, 3, 4, 5);
	Bar bar1(6, 7, 8, 9, 10, 11);

	std::cout << "bar0 ";
	bar0.print();
	std::cout << "bar1 ";
	bar1.print();

	std::vector<Foo> store;
	store.push_back(bar0);
	store.push_back(bar1);

	auto downcast0 = static_cast<Bar*>(&store[0]);
	auto downcast1 = static_cast<Bar*>(&store[1]);

	std::cout << "downcast0 ";
	downcast0->print();
	std::cout << "downcast1 ";
	downcast1->print();

	system("pause");
}