#include <iostream>
using namespace std;
class A
{
public:
void foo()
{
cout << "A";
}
};
class B : public A
{
public:
void foo()
{
cout << "B";
}
};
class C
{
public:
virtual void foo()
{
cout << "C";
}
};
class D : public C
{
public:
void foo()
{
cout << "D";
}
};
int main() {
B b;
b.foo();
(static_cast<A&>(b)).foo();
D d;
d.foo();
(static_cast<C&>(d)).foo();
return 0;
}