#include <iostream>
using namespace std;

class A
{
public:
    int var;
public:
    A(int x)
    {
        var = x;    // Это обращение к A::var
    }
};

class B: public A
{
protected:
    int var;
public:
    B():A(2)
    {
        var = 4;  // Обращение к B::var
    }
};

class C: public A
{
protected:
    int var;
public:
    C():A(3)
    {
        var = 6;    // Обращение к C::var
    }
};


class D: public B, public C
{
protected:
    int var;
public:

    void method()
    {
        var = static_cast<A*>(static_cast<B*>(this))->var;       // Должен выдать 2
        cout << var << endl;

        var = ((A*)(C*)this)->var;       // Должен выдать 3
        cout << var << endl;

        var = B::var;          // Должен выдать 4
        cout << var << endl;

        var = C::var;          // Должен выдать 6
        cout << var << endl;
    }
};

int main()
{
    D obj;
    obj.method();
}