본문 바로가기
공부

[C++] 상속 접근 지정자 (Inheritance And Access Specifier)

by MY블로그 2023. 5. 14.

상속 접근 지정자는 3가지

  1. public
  2. private
  3. protected

특징

[public]

public 구간에 정의된 속성은 파생클래스(자식)의 정의부에서 접근이 가능하며

파생클래스(자식)의 객체를 통해서도 접근이 가능합니다.

[private]

private 구간에 정의된 속성은 파생클래스(자식)의 정의부에서 접근이 불가능하며

파생클래스(자식)의 객체를 통해서도 접근이 불가능합니다.

또한 기반클래스(부모/본인)의 객체를 통해서도 접근이 불가능합니다.

오로지 기반클래스의 정의부 내에서만 접근이 가능합니다.

[protected]

protected 구간에 정의된 속성은 파생클래스(자식)의 정의부에서 접근이 가능하지만

외부에서는 접근이 불가능 하며, 기반클래스나 파생클래스의 객체를 통해서도 접근이 불가능합니다.

상속 접근 지정자 기반(부모) 클래스 파생(자식) 클래스로 상속 형태
public public public
private 접근불가능
protected protected
private public public
private 접근불가능
protected public
protected public protected
private 접근불가능
protected protected

 

#include<iostream>

using namespace std;
/*
   상속 접근 지정자     부모 클래스        자식클래스
   public               public             public
                        protected          protected
                        private            접근 불가

   protected            public             protected
                        protected          protected
                        private            접근 불가

   private              public             private
                        protected          private
                        private            접근 불가
*/

class Base // 기반(부모) 클래스
{
private:
    int privateDate; // 

protected:
    int protectedData;

public:
    int publicData;
    void Test(){}
};

class Derived : private Base
{
public: // public으로 부모클래스에 있는 것들을가져와도 아래클래스에서는 쓸수 없다.
    Derived()
    {
        Test();
        publicData;
        protectedData;
        //privateDate; // 접근불가
    }
};

class A : public Derived
{
public:
    A()
    {
        //Test(); // 접근불가
        //publicData; // 접근불가
        //protectedData; // 접근불가
        //privateDate; // 접근불가
    }
};

int main()
{
    A a;
    //a.Test(); // 사용불가

    Derived d;
    //d.Test();  // 사용불가

	return 0;
}

댓글