C++ Chapter 11.4 : 상속과 접근 지정자

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 11. 상속 : 상속과 접근 지정자

Mother 클래스 안에선 m_public, m_protected, m_private 모두 직접 접근이 가능하다. 물려 받은 것이 아닌 온전히 자기 자신만의 멤버들이기 때문에.

🔔 public 상속

class Mother
{
public:
    int m_public;
protected:
    int m_protected;
private:
    int m_private;
};


class Daughter : public Mother
{
public:
    Daughter()
    {
        m_public = 7;    // ⭕
        m_protected = 7; // ⭕
        m_private = 7;  // 👈❌에러!❌
    }
}


int main()
{
    Daughter daughter;

    daughter.m_public = 100;     // ⭕
    daughter.m_protected = 100;  // 👈❌에러!❌
    daughter.m_private = 100;  // 👈❌에러!❌
}

class Daughter : public Mother public으로 상속 받으면 원래의 접근 지정자 성격이 유지된다.

  • m_public
    • Mother 에선 public👉 public 상속 👉 Daughter 에선 public
      • 자식인 Daughter 클래스 안에서도, 외부에서도 m_public을 직접 사용할 수 있다.
        • m_public = 7; // ⭕
        • daughter.m_public = 100; // ⭕
  • m_protected
    • Mother 에선 protected👉 public 상속 👉 Daughter 에선 protected
      • 자식인 Daughter 클래스 안에선 m_protected을 사용할 수 있지만
        • m_protected = 7; // ⭕
      • Daughter 클래스 외부에선 m_protected을 사용할 수 없다.
        • daughter.m_protected = 100; // 👈❌에러!❌
  • m_private
    • Mother 에선 private👉 public 상속 👉 Daughter 에선 접근 불가능
      • 자식인 Daughter 클래스 안에서도, 외부에서도 m_private을 직접 사용할 수 없다.
        • m_private = 7; // 👈❌에러!❌
        • daughter.m_private = 100; // 👈❌에러!❌


🔔 protected 상속

class Mother
{
public:
    int m_public;
protected:
    int m_protected;
private:
    int m_private;
};


class Daughter : protected Mother
{
public:
    Daughter()
    {
        m_public = 7;    // ⭕
        m_protected = 7; // ⭕
        m_private = 7;  // 👈❌에러!❌
    }
}


int main()
{
    Daughter daughter;

    daughter.m_public = 100;    // 👈❌에러!❌
    daughter.m_protected = 100;  // 👈❌에러!❌
    daughter.m_private = 100;  // 👈❌에러!❌
}

class Daughter : protected Mother protected으로 상속 받으면 더 엄격해진다. 모든 자식, 손자 클래스들 안에선 멤버를 사용할 수 있고 외부에서만 사용할 수 없다. private멤버는 모든 자식, 손자 클래스들 안에서도 접근 안된다.

  • m_public
    • Mother 에선 public👉 protected 상속 👉 Daughter 에선 protected
      • 자식인 Daughter 클래스 안에선 m_public을 사용할 수 있지만
        • m_public = 7; // ⭕
      • Daughter 클래스 외부에선 m_public을 사용할 수 없다.
        • daughter.m_public = 100; // 👈❌에러!❌
  • m_protected
    • Mother 에선 protected👉 protected 상속 👉 Daughter 에선 protected
      • 자식인 Daughter 클래스 안에선 m_protected 을 사용할 수 있지만
        • m_protected = 7; // ⭕
      • Daughter 클래스 외부에선 m_protected을 사용할 수 없다.
        • daughter.m_protected = 100; // 👈❌에러!❌
  • m_private
    • Mother 에선 private👉 protected 상속 👉 Daughter 에선 접근 불가능
      • 자식인 Daughter 클래스 안에서도, 외부에서도 m_private 을 직접 사용할 수 없다.
        • m_private = 7; // 👈❌에러!❌
        • daughter.m_private = 100; // 👈❌에러!❌


🔔 private 상속

class Mother
{
public:
    int m_public;
protected:
    int m_protected;
private:
    int m_private;
};


class Daughter : private Mother
{
public:
    Daughter()
    {
        m_public = 7;    // ⭕
        m_protected = 7; // ⭕
        m_private = 7;  // 👈❌에러!❌
    }
}

class GrandDaughter : public Daughter
{
public:
    GrandDaughter()
    {
        m_public = 24;  // 👈❌에러!❌
    }
}

int main()
{
    Daughter daughter;

    daughter.m_public = 100;    // 👈❌에러!❌
    daughter.m_protected = 100;  // 👈❌에러!❌
    daughter.m_private = 100;  // 👈❌에러!❌
}

class Daughter : private Mother private으로 상속 받으면 마치 Daughter 멤버 전체가 pirvate화되어 손자, 즉 한번 더 상속이 일어나면 모든 멤버에 접근하지 못한다. 직속 자식인 Daughter 클래스에서만 접근 가능.

  • m_public
    • Mother 에선 public👉 private 상속 👉 Daughter 에선 private
      • 자식인 Daughter 클래스 안에선 m_public을 사용할 수 있지만
        • m_public = 7; // ⭕
      • 손녀인 GrandDaughter 클래스와 Daughter 클래스 외부에선 m_public을 사용할 수 없다.
        • daughter.m_public = 100; // 👈❌에러!❌
  • m_protected
    • Mother 에선 protected👉 private 상속 👉 Daughter 에선 private
      • 자식인 Daughter 클래스 안에선 m_protected을 사용할 수 있지만
        • m_protected = 7; // ⭕
      • 손녀인 GrandDaughter 클래스와 Daughter 클래스 외부에선 m_protected 을 사용할 수 없다.
        • daughter.m_protected = 100; // 👈❌에러!❌
  • m_private
    • Mother 에선 private👉 private 상속 👉 Daughter 에선 Daughter 에선 접근 불가능
      • 자식인 Daughter 클래스 안에서도, 손녀인 GrandDaughter 클래스에서도, 외부에서도 m_private을 직접 사용할 수 없다.
        • m_private = 7; // 👈❌에러!❌
        • daughter.m_private = 100; // 👈❌에러!❌


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기