class ABC

{

private:

int num1;


protected:

int num2;


public:

int num3;

};


int main(void)

{

ABC test;


test.num1 = 0;        ---> 접근 불가!!

test.num2 = 0;        ---> 접근 불가!!

test.num3 = 0;        ---> 접근 가능!!



return 0;

}


이런 경우 "ABC 객체를 생성했는데 왜 ABC 클래스의 멤버변수에 접근이 불가능 하지?" 라고 생각할 수 있다. 


private, protected, public 선언은 객체 기준이 아니라 클래스 기준이다!


test.num3가 접근이 가능한 이유는 ABC 객체를 생성했기 때문이 아니라 ABC 클래스의 public 키워드가 ABC 클래스를 벗어난 지역에서의 접근을 허용한다는 의미이기 때문이다.


즉 객체를 기준으로 접근 범위를 정하는게 아니라 클래스를 기준으로 접근 범위를 정한다고 이해하면 된다.


만약 ABC 클래스 외부에서 num1과 num2에 접근을 하고 싶다면 

ABC클래스의 public 선언에 num1과 num2에 접근하는 함수를 정의하면 된다.


ex)

class ABC

{

public:

int GetNum1(void)

{

return num1;

}

int GetNum2(void)

{

return num2;

}

};


그리고 상속관계의 경우


class DEF : public ABC

{

생략

}


int main(void)

{

DEF example;

example.num2;  --> 접근 불가!!

}


이렇게 접근 하는것 역시 불가능 하다.

역시 private, protected, public 선언은 객체 기준이 아니라 클래스 기준이다!

이 개념만 알고 있으면 이해가 가능하다.


+ Recent posts