#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;
}