인프런 커뮤니티 질문&답변
접근지정자와 상속
작성
·
159
1
#include <iostream>
#include <cstdio>
using namespace std;
class Parent
{
public:
Parent() {
this->parent_pri = 2;
}
virtual void pri_print() {
printf("%d", parent_pri);
}
private:
int parent_pri;
};
class Public_Child : public Parent{};
int main() {
Public_Child public_child;
public_child.pri_print();
}
이거를 실행하면 비쥬얼 스튜디오에서 2가 출력이 되는데, 클래스 밖의 main 함수에서 public_child.pri_print()에 접근할 수 있는 이유가 public 이기 때문이고, 그 public안의 pri_print함수는 클래스 Parent의 멤버 함수이기 때문에 private로 지정되어 있는 parent_pri에 접근할 수 있기 때문인가요?
답변 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
Public_Child클래스는Parent클래스를public으로 상속받고 있습니다.
따라서,Parent클래스의public멤버들은Public_Child클래스에서도public으로 접근이 가능합니다. 그렇기 때문에main()함수에서public_child.pri_print()를 호출할 수 있는 것입니다.
pri_print()함수는Parent클래스의 멤버함수입니다.
클래스의 멤버함수는 해당 클래스의private멤버변수에 직접 접근할 수 있습니다.
따라서,pri_print()함수는parent_pri변수에 접근하고 그 값을 출력할 수 있습니다.
요약하자면, main() 함수에서 public_child.pri_print() 를 호출하는 것은 Public_Chlid 가 Parent 클래스를 public 으로 상속받기 때문에 가능하며, pri_print() 함수가 private 멤버변수 parent_pri 에 접근하는 것은 멤버함수가 자신의 클래스의 private 멤버에 접근할 수 있기 때문입니다.





