멤버 접근 제한자
- private : 자신의 클래스 내에서만 멤버 접근이 가능.
- protected : 파생 클래스(자식 클래스)와 자신의 클래스에서만 멤버 접근이 가능.
- public : 클래스 외부에서도 멤버 접근이 가능.
자식 클래스에서 접근
#include <iostream>
using namespace std;
class A
{
private :
void Print_Private_A( ) { cout << "Print_Private_A( )" << endl; }
protected :
void Print_Protected_A( ) { cout << "Print_Protected_A( )" << endl; }
public :
void Print_Public_A( ) { cout << "Print_Public_A( )" << endl; }
};
class B : public A
{
public :
void PrintAll( )
{
Print_Protected_A( );
Print_Public_A( );
}
};
상속 유형에 따른 접근 제한자
- 상속 유형에 따라 부모 클래스의 멤버들이 자식 클래스의 각 접근 제한을 가지며 상속된다..
상속 유형
- private 상속
private 멤버는 상속되지 않고
protected 멤버는 'private'
public 멤버는 'private'으로 상속됨
- protected 상속
private 멤버는 상속되지 않고
protected 멤버는 'protected'
public 멤버는 'protected'으로 상속됨
- public 상속
private 멤버는 상속되지 않고
protected 멤버는 'protected'
public 멤버 모두 'public'으로 상속됨
private 상속
class A
{
private :
void Print_Private_A( ) { cout << "Print_Private_A( )" << endl; }
protected :
void Print_Protected_A( ) { cout << "Print_Protected_A( )" << endl; }
public :
void Print_Public_A( ) { cout << "Print_Public_A( )" << endl; }
};
class B : private A
{
private :
void Print_Private_B( ) { cout << "Print_Private_B( )" << endl; }
protected :
void Print_Protected_B( ) { cout << "Print_Protected_B( )" << endl; }
public :
void Print_Public_B( ) { cout << "Print_Public( )_B" << endl; }
public :
void PrintAll_B( )
{
Print_Protected_A();
Print_Public_A();
}
};
void main( )
{
B ob;
ob.Print_Public_B();
}
protected 상속
class A
{
private :
void Print_Private_A( ) { cout << "Print_Private_A( )" << endl; }
protected :
void Print_Protected_A( ) { cout << "Print_Protected_A( )" << endl; }
public :
void Print_Public_A( ) { cout << "Print_Public_A( )" << endl; }
};
class B : protected A
{
private :
void Print_Private_B( ) { cout << "Print_Private_B( )" << endl; }
protected :
void Print_Protected_B( ) { cout << "Print_Protected_B( )" << endl; }
public :
void Print_Public_B( ) { cout << "Print_Public( )_B" << endl; }
public :
void PrintAll_B( )
{
Print_Protected_A();
Print_Public_A();
}
};
void main( )
{
B ob;
ob.Print_Public_B();
}
public 상속
class A
{
private :
void Print_Private_A( ) { cout << "Print_Private_A( )" << endl; }
protected :
void Print_Protected_A( ) { cout << "Print_Protected_A( )" << endl; }
public :
void Print_Public_A( ) { cout << "Print_Public_A( )" << endl; }
};
class B : public A
{
private :
void Print_Private_B( ) { cout << "Print_Private_B( )" << endl; }
protected :
void Print_Protected_B( ) { cout << "Print_Protected_B( )" << endl; }
public :
void Print_Public_B( ) { cout << "Print_Public( )_B" << endl; }
public :
void PrintAll_B( )
{
Print_Protected_A();
Print_Public_A();
}
};
void main( )
{
B ob;
ob.Print_Public_A();
ob.Print_Public_B();
}
결론
- 상속 유형에서 private 상속이나 protected 상속은 잘 사용하지 않는다.