protected로 선언된 멤버가 허용하는 접근의 범위

private < protected < public

“protected로 선언된 멤버변수는 이를 상속하는 유도 클래스에서 접근이 가능합니다.!”

많이 사용되지 않으면 기본적으로 기초 클래스와 이를 상속하는 유도 클래스 사이에서도 ‘정보은닉’은 지켜지는 게 좋다.

세가지 형태의 상속

앞서 정의한 유도 클래스를 다시 한번 보자.

class Derived : public Base
{
	.....
}

상속을 명시하는데 있어서 public이 사용되었음을 알 수 있다. 반면 다른 형태의 상속도 가능하다

class Derived : protected Base
{
	.....
}

마지막으로 다음은 ‘private 상속’을 보여준다

class Derived : private Base
{}

protected 상속

class Base
{
private:
	int num1;
protected:
	int num2;
public:
	int num3;
}

class Derived: protected Base
{
	//empty
}

위의 클래스가 보이는 ‘protected 상속’이 의미하는 바는 다음과 같다.

“protected보다 접근의 범위가 넓은 멤버는 protected로 변경시켜서 상속하겠다.”

그런데 protected 보다 접근범위가 넓은 멤버는 public 멤버뿐이니, proteced 상속을 한 Derived 클래스는 다음의 형태가 된다(상속한 멤버를 Derived 클래스 내에 직접 표시했기 때문에 상속의 선언을 흐리게 표시하였다).

private 상속

class Base
{
private:
	int num1;
protected:
	int num2;
public:
	int num3;
};

위와 같이 private 보다 범위가 넓은 멤버들은 private 으로 변한다.

public 상속

위와 같다.