#include <iostream>
class A {
public:
virtual void foo() { std::cout << "A" << std::endl; }
void bar() { std::cout << "A" << std::endl; }
};
class B : public A {
public:
virtual void foo() { std::cout << "B" << std::endl; }
void bar() { std::cout << "B" << std::endl; }
};
int main(int, char**) {
B b;
A * pA = new A;
A * pA2 = &b;
b.foo(); b.bar();
pA ->foo();
pA->bar();
pA2->foo();
pA2->bar();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQSB7CnB1YmxpYzoKCXZpcnR1YWwgdm9pZCBmb28oKSB7IHN0ZDo6Y291dCA8PCAiQSIgPDwgc3RkOjplbmRsOyB9Cgl2b2lkIGJhcigpIHsgc3RkOjpjb3V0IDw8ICJBIiA8PCBzdGQ6OmVuZGw7IH0KfTsKCmNsYXNzIEIgOiBwdWJsaWMgQSB7CnB1YmxpYzoKCXZpcnR1YWwgdm9pZCBmb28oKSB7IHN0ZDo6Y291dCA8PCAiQiIgPDwgc3RkOjplbmRsOyB9Cgl2b2lkIGJhcigpIHsgc3RkOjpjb3V0IDw8ICJCIiA8PCBzdGQ6OmVuZGw7IH0KfTsKCQoKaW50IG1haW4oaW50LCBjaGFyKiopIHsKCUIgYjsKCUEgKiBwQSA9IG5ldyBBOwoJQSAqIHBBMiA9ICZiOwogICAgYi5mb28oKTsgYi5iYXIoKTsKICAgIHBBIC0+Zm9vKCk7IAogICAgcEEtPmJhcigpOwogICAgcEEyLT5mb28oKTsgCiAgICBwQTItPmJhcigpOwp9