#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");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgRm9vCnsKcHVibGljOgoJRm9vKGludCBhLCBpbnQgYikgOiBhKGEpLCBiKGIpIHt9CglpbnQgYSwgYjsKfTsKCmNsYXNzIEJhciA6IHB1YmxpYyBGb28KewpwdWJsaWM6CglCYXIoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQsIGludCBlLCBpbnQgZikgOgoJCUZvbyhhLCBiKSwgYyhjKSwgZChkKSwgZShlKSwgZihmKSB7fQoJdm9pZCBwcmludCgpCgl7CgkJc3RkOjpjb3V0IDw8IGEgPDwgIiAiIDw8IGIgPDwgIiAiIDw8IGMgPDwgIiAiIDw8IGQgPDwgIiAiIDw8IGUgPDwgIiAiIDw8IGYgPDwgJ1xuJzsKCX0KCWludCBjLCBkLCBlLCBmOwp9OwoKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKewoJQmFyIGJhcjAoMCwgMSwgMiwgMywgNCwgNSk7CglCYXIgYmFyMSg2LCA3LCA4LCA5LCAxMCwgMTEpOwoKCXN0ZDo6Y291dCA8PCAiYmFyMCAiOwoJYmFyMC5wcmludCgpOwoJc3RkOjpjb3V0IDw8ICJiYXIxICI7CgliYXIxLnByaW50KCk7CgoJc3RkOjp2ZWN0b3I8Rm9vPiBzdG9yZTsKCXN0b3JlLnB1c2hfYmFjayhiYXIwKTsKCXN0b3JlLnB1c2hfYmFjayhiYXIxKTsKCglhdXRvIGRvd25jYXN0MCA9IHN0YXRpY19jYXN0PEJhcio+KCZzdG9yZVswXSk7CglhdXRvIGRvd25jYXN0MSA9IHN0YXRpY19jYXN0PEJhcio+KCZzdG9yZVsxXSk7CgoJc3RkOjpjb3V0IDw8ICJkb3duY2FzdDAgIjsKCWRvd25jYXN0MC0+cHJpbnQoKTsKCXN0ZDo6Y291dCA8PCAiZG93bmNhc3QxICI7Cglkb3duY2FzdDEtPnByaW50KCk7CgoJc3lzdGVtKCJwYXVzZSIpOwp9