인프런 커뮤니티 질문&답변
class Derived : private Base일 경우질문
작성
·
201
1
class Derived : private Base
{
public:
Derived()
{
// private Base
Base::m_public; // 손자 클래스에서 사용 불가
Base::m_protected; // 손자 클래스에서 사용 불가
// x
Base::m_private; // 사용 불가
}
};안녕하세요. 항상 고생 많으십니다.
해당 코드에서
class Derived : private Base가 되면. class Derived 내에서,
Base::m_private는 당연히 접근이 불가능한 것은 맞는데 나머지
Base::m_public;
Base::m_protected; 에 대해서는 Derived내에서 접근이 가능한가요?
손자 클래스에서는 접근이 불가능하다는 것을 말씀 해주셔서 이해 했는데, 자식 클래스에서는 접근 여부가 어떻게 될까요?
답변 2
2
안녕하세요, 질문&답변 도우미 Soobak 입니다.
Derived 클래스에서 첨부해주신 코드의, Base::m_public; Base::m_protected; 는 Derived 클래스에서 접근이 가능합니다.
상속에 있어서 접근 지정자는 더 엄격한 쪽을 따라가게 되며,
private Base 를 상속 받아서 각각의 멤버 변수가 private 접근으로 지정되었더라도 private 멤버 변수는 같은 클래스 안에서 접근이 가능하기 때문입니다.
0
안녕하세요, 인프런 AI 인턴입니다.
wlsdud2933님의 질문에 대해 제가 찾은 정보를 바탕으로 답변 드립니다.
C++에서 클래스의 상속 관계에서 접근 제어 지정자가 어떻게 작동하는지에 대한 궁금증을 가지셨군요. 특히, private 상속 시 Derived 클래스에서 Base 클래스의 멤버에 대한 접근 권한이 어떻게 되는지에 대해 문의하셨습니다.
여기에 대한 답변은 다음과 같습니다:
public상속의 경우, 기본 클래스의public및protected멤버는 파생 클래스에서도 동일하게 접근이 가능합니다.
protected상속의 경우, 기본 클래스의public및protected멤버들은 파생 클래스에서protected로 접근됩니다.
private상속시, 기본 클래스의public및protected멤버들은 파생 클래스에서private으로 취급됩니다.
질문하신 사항과 밀접하게 연관된 질문으로 “상속 질문 있습니다”에서 홍정모 강사님이 답변해주신 내용이 있습니다. 이 질문에서는 상속받은 클래스 옆에 기본 클래스의 접근 지정자를 쓰지 않았을 때 어떻게 되는지에 대한 문의가 있었는데, 이 내용도 참고하시면 좋을 것 같습니다.
Derived 클래스에서 Base 클래스의 m_public, m_protected에 대한 접근은 가능합니다. 하지만, private으로 상속될 경우, Derived 클래스는 Base에 있는 항목들을 마치 자신의 private 항목처럼 다루게 되어 외부에서는 접근이 불가능합니다. 즉, Derived 클래스 내부에서는 Base의 m_public과 m_protected에 접근할 수 있지만, Derived를 상속하는 다른 클래스(손자 클래스)에서는 접근할 수 없습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






감사합니다.