• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

접근지정자와 상속

23.10.07 19:48 작성 조회수 78

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님의 프로필

Soobak

2023.10.07

안녕하세요, 답변 도우미 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_ChlidParent 클래스를 public 으로 상속받기 때문에 가능하며, pri_print() 함수가 private 멤버변수 parent_pri 에 접근하는 것은 멤버함수가 자신의 클래스의 private 멤버에 접근할 수 있기 때문입니다.