공부
[C++] 상속 접근 지정자 (Inheritance And Access Specifier)
MY블로그
2023. 5. 14. 13:40
상속 접근 지정자는 3가지
- public
- private
- 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;
}