#include <iostream>
using namespace std;

class Base
{
public:
	int m_public;
protected:
	int m_protected; // base.m_protected 와 같이 직접 접근 불가
private:
	int m_private;
};

class Derived : public Base 
{
public:
  Dervied()
  {
    m_public = 123; // 접근 가능
   	m_protected = 123; // 접근 가능
    // m_private = 123 // 접근 불가능
    
    // protected Base로 상속받으면
    // Base::m_public; // 접근 가능.
    // Base::m_protected; // 접근 가능
    // Base::m_private; // 접근 불가능.
  }
};

class GrandChild : public Derived
{
public:
  GrandChild()
  {
    // Dervied::m_public; Derived에서 private base로 상속받으면 m_public이 private처럼 작동하기 때문에 접근 불가능.
  }
}

int main()
{
	Base base;
  
  Derived derived;
	derived.m_public = 1024; // 접근 가능 // 만약 부모로부터 protected로 상속받으면 외부에서 m_public 접근 불가능.
  // derived.m_protected = 1024; // 접근 불가능
  
	return 0;
}