#include <iostream>
class A
{
public:
virtual void foo() = 0;
};
class B
{
public:
virtual void foo() = 0;
};
class C : public A, public B
{
public:
virtual void foo();
};
void C::foo() { std::cout<<"C::foo"<<std::endl; }
void C::A::foo() { std::cout<<"C::A::foo"<<std::endl; }
void C::B::foo() { std::cout<<"C::B::foo"<<std::endl; }
int main()
{
C c;
A* pa = &c;
B* pb = &c;
c.foo();
c.A::foo();
c.B::foo();
pa->foo();
pb->foo();
pa->A::foo();
pb->B::foo();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQQp7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBmb28oKSA9IDA7Cn07CgpjbGFzcyBCCnsKcHVibGljOgogICAgdmlydHVhbCB2b2lkIGZvbygpID0gMDsKfTsKCmNsYXNzIEMgOiBwdWJsaWMgQSwgcHVibGljIEIKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgZm9vKCk7Cn07Cgp2b2lkIEM6OmZvbygpICAgIHsgc3RkOjpjb3V0PDwiQzo6Zm9vIjw8c3RkOjplbmRsOyB9CnZvaWQgQzo6QTo6Zm9vKCkgeyBzdGQ6OmNvdXQ8PCJDOjpBOjpmb28iPDxzdGQ6OmVuZGw7IH0Kdm9pZCBDOjpCOjpmb28oKSB7IHN0ZDo6Y291dDw8IkM6OkI6OmZvbyI8PHN0ZDo6ZW5kbDsgfQoKaW50IG1haW4oKQp7CiAgICBDIGM7CiAgICBBKiBwYSA9ICZjOwogICAgQiogcGIgPSAmYzsKCiAgICBjLmZvbygpOwogICAgYy5BOjpmb28oKTsKICAgIGMuQjo6Zm9vKCk7CiAgICBwYS0+Zm9vKCk7CiAgICBwYi0+Zm9vKCk7CiAgICBwYS0+QTo6Zm9vKCk7CiAgICBwYi0+Qjo6Zm9vKCk7Cn0=