Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 파생 클래스에서 protected 멤버에 접근하는 방법 완벽 정리

C++에서 클래스는 public, private, protected 세 가지 접근 지정자 영역을 가지며, 각 영역에는 해당하는 클래스 멤버들이 포함됩니다.

클래스의 protected 멤버는 private 멤버와 매우 유사합니다. 두 멤버 모두 클래스 외부에서는 직접 접근할 수 없기 때문입니다. 하지만 결정적인 차이가 하나 있습니다. 바로 파생 클래스(자식 클래스)에서는 protected 멤버에 접근할 수 있지만, private 멤버에는 접근할 수 없다는 점입니다.

예제 코드

다음은 C++에서 파생 클래스가 기반 클래스의 protected 데이터 멤버에 접근하는 과정을 보여주는 프로그램입니다.

#include <iostream>
using namespace std;

class Base {
    protected:
        int num = 7;
};

class Derived : public Base {
    public:
        void func() {
            cout << "num의 값: " << num;
        }
};

int main() {
    Derived obj;
    obj.func();
    return 0;
}

실행 결과

위 프로그램의 출력 결과는 다음과 같습니다.

num의 값: 7

코드 상세 분석

1. 기반 클래스와 파생 클래스 정의

Base 클래스에는 데이터 멤버 num이 선언되어 있으며, 이 멤버는 protected로 지정되어 있습니다. 그리고 Derived 클래스는 public 상속 방식으로 Base 클래스를 상속받습니다. 상속받은 Derived 클래스 내부의 함수 func()num의 값을 출력합니다. 해당 코드는 다음과 같습니다.

class Base {
    protected:
        int num = 7;
};

class Derived : public Base {
    public:
        void func() {
            cout << "num의 값: " << num;
        }
};

만약 numprivate으로 선언되었다면, Derived 클래스의 func() 함수에서 이 멤버에 접근하려 할 때 컴파일 오류가 발생합니다. 이것이 protected와 private의 핵심적인 차이입니다.

2. main() 함수에서 객체 생성 및 호출

main() 함수에서는 Derived 클래스의 객체 obj를 생성한 후, 멤버 함수 func()를 호출하여 protected 멤버의 값을 화면에 출력합니다.

int main() {
    Derived obj;
    obj.func();
    return 0;
}

정리

  • private 멤버: 클래스 외부뿐 아니라 파생 클래스에서도 접근 불가능
  • protected 멤버: 클래스 외부에서는 접근할 수 없지만, 파생 클래스(자식 클래스) 내부에서는 접근 가능
  • public 멤버: 클래스 외부 어디서든 자유롭게 접근 가능

이처럼 protected 접근 지정자는 상속 관계에서 기반 클래스의 데이터를 자식 클래스에게 안전하게 공유하면서도, 외부 코드로부터는 은닉하고 싶을 때 유용하게 사용됩니다.