private < protected < public
“protected로 선언된 멤버변수는 이를 상속하는 유도 클래스에서 접근이 가능합니다.!”
많이 사용되지 않으면 기본적으로 기초 클래스와 이를 상속하는 유도 클래스 사이에서도 ‘정보은닉’은 지켜지는 게 좋다.
앞서 정의한 유도 클래스를 다시 한번 보자.
class Derived : public Base
{
.....
}
상속을 명시하는데 있어서 public이 사용되었음을 알 수 있다. 반면 다른 형태의 상속도 가능하다
class Derived : protected Base
{
.....
}
마지막으로 다음은 ‘private 상속’을 보여준다
class Derived : private Base
{}
class Base
{
private:
int num1;
protected:
int num2;
public:
int num3;
}
class Derived: protected Base
{
//empty
}
위의 클래스가 보이는 ‘protected 상속’이 의미하는 바는 다음과 같다.
“protected보다 접근의 범위가 넓은 멤버는 protected로 변경시켜서 상속하겠다.”
그런데 protected 보다 접근범위가 넓은 멤버는 public 멤버뿐이니, proteced 상속을 한 Derived 클래스는 다음의 형태가 된다(상속한 멤버를 Derived 클래스 내에 직접 표시했기 때문에 상속의 선언을 흐리게 표시하였다).
class Base
{
private:
int num1;
protected:
int num2;
public:
int num3;
};
위와 같이 private 보다 범위가 넓은 멤버들은 private 으로 변한다.
위와 같다.