protected는 public과 private특징을 섞었습니다.
멤버 변수에 protected를 지정하면 파생 클래스에서는 public처럼 접근이 가능하지만 객체에서는 직접 접근이 불가능합니다.
#include <iostream>
using namespace std;
class Person {
private:
int stat;
protected:
int power;
public:
virtual void Show(int A) {
cout << "a";
}
};
class Man : public Person {
public:
void PowerUp() {
stat++; //에러!! //접근 불가능
power++;
}
};
int main(void) {
Man man = Man();
man.power = 0; //에러!! 접근 불가능
}
만약 멤버 변수에 대한 값 변경은 특정 멤버 함수를 거쳐야만 가능하게 하려면 데이터 은닉 관점에서는 안전하지 않는 설계가 됩니다.
(상속받은 파생 클래스에서는, 직접 멤버에 접근이 가능하기 때문입니다.)
그래서 가능하면 private 접근제어자를 사용하는 게 좋습니다.
때로는 protected접근제어자도 파생클래스에서 접근할 수 있게 되니 유용할 수도 있습니다.
댓글