클래스의 멤버 변수의 공개 범위를 명시적으로 선언하지 않으면, 자동으로 private 범위로 설정 된다. 이는 해당 멤버 변수가 클래스 외부에서 접근 불가능 하고, 클래스 내부 함수에서만 접근이 가능 하다는 것을 의미한다.
클래스에선 private, public, protected 이렇게 총 3단계의 공개 범위가 있다.
위와 같은 접근 범위 설정을 통해서, 클래스 내부의 멤버를 외부의 변경으로 부터 보호 할 수 있다.
만약, 클래스 내부의 멤버를 변경은 불가능하도록 하고 접근은 가능 하도록 하고 싶다면, 엑세스 함수 선언을 통해서 해당 접근이 가능 하도록 할 수 있다. 또한, 클래스의 멤버 변수를 변경 하기 전에 검증하는 작업을 수행 하고 싶을 때도 엑세스 함수 선언을 통해 가능하다. 아래는 엑세스 함수인 getter, setter의 예시이다.
class Pos{
private:
int x;
int y;
public:
int GetX() const{
return x;
}
int GetY() const{
return y;
}
bool SetX(int x){
if(x >= 0){
this->x = x;
return true;
}
return false;
}
bool SetY(int y){
if(y >= 0){
this->y = y;
return true;
}
return false;
}
}
위 Get 함수와 Set 함수는 private 범위의 멤버 변수에 접근하여 해당 값을 얻거나 변경 할 수 있도록 하는 함수이다.
여기서 Get 함수는 const 함수로 선언 되어 있는데, 이는 컴파일러에게 해당 함수가 클래스의 멤버 변수를 함수 내부에서 변경하지 않겠다는 의미이다. 이렇게 const 함수 선언을 통해서, private 멤버 변수의 제한적 접근을 허용 할 수 있다.
또한 Set 함수에서는 멤버 변수를 함수를 통해 변경 하기 전, 전달받은 인자의 범위를 검사해서, 해당 범위를 벗어나면, false를 반환하고, 범위 내부라면, 클래스 변수를 변경하고 true를 반환한다.
C++에서는 const 참조자를 통해 클래스에 접근 하는 경우, 클래스 내부 멤버의 값 변경이 가능 할 가능성을 가진 함수의 호출을 제한한다. 즉, const 참조자를 통해 클래스의 함수를 호출 할 때는, 호출 할 클래스의 함수도 반드시 const 함수로 선언되어 있어야 한다. 또한, const 참조자로 접근하는 클래스는 멤버 변수가 public 범위더라도, 값의 변경이 불가능하다.