[C/C++] 접근 지정자
C++에서 제공하는 접근지정자 (public, protected, private)은 크게 두 가지 종류로 역할이 나뉜다. 우선 각 접근 지정자에 대한 정의는 다음과 같다.
public: 조건 없이 어디서든 접근 가능protected: 상속받을 시 접근 가능private: 해당 class 내에서만 접근 가능
Class 내 Member에 대한 접근지정자
#include <iostream>
using namespace std;
class A
{
public:
int var1;
A(): var1(1), var2(2), var3(3) { }
protected:
int var2;
private:
int var3;
};
int main() {
A a;
cout << a.var1 << endl; // Build okay
cout << a.var2 << endl; // Build error
cout << a.var3 << endl; // Build error
return 0;
}
위 예시를 보면 protected, private의 경우 외부에서 접근이 금지된다.
Class 상속에 따른 접근지정자
#include <iostream>
using namespace std;
class A
{
public:
int var1;
A(): var1(1), var2(2), var3(3) { }
protected:
int var2;
private:
int var3;
};
class B: public A
{
public:
B() {}
void printVar(void)
{
cout << var1 << endl; // Build okay
cout << var2 << endl; // Build okay
cout << var3 << endl; // Build error
}
};
int main() {
A a;
return 0;
}
위 예시를 보면 B class에서 A class의 멤버에 접근을 할 때 private 변수에 접근시 error가 발생되는 것을 확인 할 수 있다.
#include <iostream>
using namespace std;
class A
{
public:
int var1;
A(): var1(1), var2(2), var3(3) { }
void setVar (int _var1, int _var2, int _var3)
{
var1 = _var1;
var2 = _var2;
var3 = _var3;
}
protected:
int var2;
private:
int var3;
};
class B: protected A
{
public:
B() {}
void printVar(void)
{
cout << var1 << endl; // Build okay
cout << var2 << endl; // Build okay
cout << var3 << endl; // Build error
}
};
int main() {
B b;
b.setVar(10, 20, 30); // Build error
cout << b.var1 << endl; // Build error
cout << b.var2 << endl; // Build error
cout << b.var3 << endl; // Build error
return 0;
}
위 예시를 보면 B class에서 A class를 protected 형태로 상속받기 떄문에, 이 의미는 상속받는 A class 내에서 protected 보다 접근 범위가 넓은 (public) 멤버들을 모두 protected로 받는다 라는 의미다.
따라서 B에서 바라보는 A class의 멤버들은 protected이기 떄문에 public이 아닌 이상 외부에서 접근이 불가하다.