오늘은 클래스 상속시 private, protected, public 상속이 있는데 부모 클래스를 이 3가지 상식으로 상속을 받을 때 어떤 상속 영향을 미치는지 알아보도록 하죠.
[private 상속]
private -> 접근불가
protected -> private
public -> private
위 표현처럼 private 접근만 접근 불가이고 나머지 protected, public은 private 접근 방식으로 바뀌게 됩니다.
[protected 상속]
private -> 접근불가
protected -> protected
public -> protected
위 표현처럼 private 접근만 접근 불가이고 나머지 protected, public은 protected 접근 방식으로 바뀌게 됩니다.
[public 상속]
private -> 접근불가
protected ->protected
public -> publc
위 표현처럼 privated 접근만 접근 불가이고 나머지는 부모 접근자 형에 맞게 접근 방식이 유지 됩니다.
종합해 보면, 부모 클래스의 private 접근은 자식 클래스에서는 접근 불가이고 나머지 protected, public은 상속 형을 기준으로 해서 형태가 바뀌게 됩니다. 단 public은 기존의 접근 형태를 유지하고요.
[전체소스]
#include
using namespace std;
class AAA {
private:
int a=10;
protected:
int b=20;
public:
int c=30;
};
class BBB : private AAA {
public:
void output(){
//cout<<a<<endl; //접근불가
//cout<<b<<endl; //private
//cout<<c<<endl; //private
}
};
class CCC : protected AAA {
public:
void output(){
//cout<<a<<endl; //접근불가
cout<<b<<endl; //protected
cout<<c<<endl; //protected
}
};
class DDD : public AAA {
public:
void output(){
//cout<<a<<endl; 접근불가
cout<<b<<endl; //protected
cout<<c<<endl; //public
}
};
int main(int argc, char** argv) {
BBB op1;
CCC op2;
DDD op3;
op1.output();
op2.output();
op3.output();
return 0;
}
위 코딩에서 에러가 발생하는 부분은 주석 처리를 했습니다. 테스트 할 때는 주석 처리 된 부분을 해제하고 컴파일을 시켜 보세요. 어떤 에러 메시지가 출력 되시는지 보세요.
[결과]
실습 코딩보다는 설명 부분을 잘 봐주시기 바랍니다. 상속 관계는 무척 중요하고 이 부분을 혼동하시는 분들이 종종 있습니다. 접근 상속 개념을 잘 정리해 주세요.