#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

class A
{
public:
    int a;

protected:
    int b;

private:
    int c;

public:
    A(int a, int b, int c) : a(a), b(b), c(c) {}

public:
    void showA()
    {
        cout << "A: " << a << ", " << b << ", " << c << endl;
    }
};

class B : public A
{
public:
    B() : A(1, 3, 2) {}

public:
    void showB()
    {
        showA();
        // B 类的成员函数内，可以访问父类的 public 、protected 成员
        // a, b 是父类的 public/protected 的成员变量
        cout << "B: " << a << ", " << b << endl;
    }
};

class C : protected B
{
public:
    C() : B() {}

public:
    void showC()
    {
        showA();
        showB();
        cout << "C: " << a << ", " << b << endl;
    }
};

class D : private C
{
public:
    D() : C() {}

public:
    void showD()
    {
        showA();
        cout << "D: " << a << ", " << b << endl;
    }
};

class E : public D
{
public:
    E() : D() {}

public:
    void showE()
    {
        showA();
        // cout << "E: " << a << ", " << b << endl;
    }
};

int main()
{
    // B b1;
    // b1.showA();
    // b1.showB();

    // C c1;
    // c1.showC();

    // D d1;
    // d1.showD();

    E e1;
    e1.showD();

    return 0;
}
