C++ Chapter 11.4 : 상속과 접근 지정자
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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; // ⭕
- 자식인 Daughter 클래스 안에서도, 외부에서도 m_public을 직접 사용할 수 있다.
- Mother 에선
- m_protected
- Mother 에선
protected
👉 public 상속 👉 Daughter 에선protected
- 자식인 Daughter 클래스 안에선 m_protected을 사용할 수 있지만
- m_protected = 7; // ⭕
- Daughter 클래스 외부에선 m_protected을 사용할 수 없다.
- daughter.m_protected = 100; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에선 m_protected을 사용할 수 있지만
- Mother 에선
- m_private
- Mother 에선
private
👉 public 상속 👉 Daughter 에선 접근 불가능- 자식인 Daughter 클래스 안에서도, 외부에서도 m_private을 직접 사용할 수 없다.
- m_private = 7; // 👈❌에러!❌
- daughter.m_private = 100; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에서도, 외부에서도 m_private을 직접 사용할 수 없다.
- Mother 에선
🔔 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; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에선 m_public을 사용할 수 있지만
- Mother 에선
- m_protected
- Mother 에선
protected
👉 protected 상속 👉 Daughter 에선protected
- 자식인 Daughter 클래스 안에선 m_protected 을 사용할 수 있지만
- m_protected = 7; // ⭕
- Daughter 클래스 외부에선 m_protected을 사용할 수 없다.
- daughter.m_protected = 100; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에선 m_protected 을 사용할 수 있지만
- Mother 에선
- m_private
- Mother 에선
private
👉 protected 상속 👉 Daughter 에선 접근 불가능- 자식인 Daughter 클래스 안에서도, 외부에서도 m_private 을 직접 사용할 수 없다.
- m_private = 7; // 👈❌에러!❌
- daughter.m_private = 100; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에서도, 외부에서도 m_private 을 직접 사용할 수 없다.
- Mother 에선
🔔 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; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에선 m_public을 사용할 수 있지만
- Mother 에선
- m_protected
- Mother 에선
protected
👉 private 상속 👉 Daughter 에선private
- 자식인 Daughter 클래스 안에선 m_protected을 사용할 수 있지만
- m_protected = 7; // ⭕
- 손녀인 GrandDaughter 클래스와 Daughter 클래스 외부에선 m_protected 을 사용할 수 없다.
- daughter.m_protected = 100; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에선 m_protected을 사용할 수 있지만
- Mother 에선
- m_private
- Mother 에선
private
👉 private 상속 👉 Daughter 에선 Daughter 에선 접근 불가능- 자식인 Daughter 클래스 안에서도, 손녀인 GrandDaughter 클래스에서도, 외부에서도 m_private을 직접 사용할 수 없다.
- m_private = 7; // 👈❌에러!❌
- daughter.m_private = 100; // 👈❌에러!❌
- 자식인 Daughter 클래스 안에서도, 손녀인 GrandDaughter 클래스에서도, 외부에서도 m_private을 직접 사용할 수 없다.
- Mother 에선
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기