ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] 접근지정자 (access modifiers)
    C++ 2023. 4. 11. 22:52

    [종류와 직접접근 방식]

     

    private : 해당 클래스에서만 직접접근 가능

    다른 클래스에서 사용하려면 해당 클래스의 public 멤버함수를 통해 접근 가능

    protected : 상속일때만 예외를 둔 private 

    public : 어디서든 직접접근 가능

     


    [private 멤버]

     

    private 변수 , private 함수, private 생성자 등 모든 private 멤버는

     

    해당 클래스의 public 멤버로 우회해서 접근해야한다

     

    즉 직접 접근이 불가능하다!

     

    그래서 private 멤버가 있을때는

    public 생성자 또는 getter/setter 함수로 접근이 가능한지부터 살펴보는게 좋다

     


    [예제 3-7 컴파일 오류 찾기]

     

    class PrivateAccessError {
    private:
    	int a;
    	void f();
    	PrivateAccessError(); // private 생성자
    	// private 생성자는 public 함수에 의해서만 호출가능
    	// 얘만 띡 호출은 못함
    public:
    	int b;
    	PrivateAccessError(int x); // public 생성자
    	void g();
    };

     

    PrivateAccessError::PrivateAccessError() { // private 생성자
    	a = 1;
    	b = 1;
    }
    
    PrivateAccessError::PrivateAccessError(int x) { // public 생성자
    	a = x;
    	b = x;
    }
    
    void PrivateAccessError::f() { // private 함수
    	a = 5;
    	b = 5;
    }
    
    void PrivateAccessError::g() { // public 함수
    	a = 6;
    	b = 6;
    }

     

    int main() {
    	PrivateAccessError objA; // private 생성자 직접 접근 불가
        
    	PrivateAccessError objB(100); // public 생성자이므로 가능
        
    	objB.a = 10; // private 변수 직접 접근 불가
        
    	objB.b = 20;
        
    	objB.f(); // private 함수 직접 접근 불가
        
    	objB.g();
        
    	return 0;
    }

     


    1. private 생성자

    PrivateAccessError objA;

     

    private 생성자도 public 함수를 통해 접근해야한다

    main 에서 바로 호출 불가다.

     

    cf) Singleton 객체가 private 생성자를 보유한다. 그리고 해당 생성자는 함수를 통해서만 접근가능하다

     

    2. private 변수

    objB.a = 10;

     

    private 변수는 객체로 직접호출 불가

    private 변수의 경우 getter 나 setter 함수로 호출해야한다

    또는 생성자로 객체초기화할때 접근해야한다

     

    이게 getter와 setter라는 함수가 보편화된 이유이다

     

     

    'C++' 카테고리의 다른 글

    [C++] MyString 클래스 실습  (0) 2023.04.13
    [C++] const  (1) 2023.04.12
    [C++] friend  (2) 2023.04.11
    [C++] static  (0) 2023.04.06
    [C++] inline function  (0) 2023.04.03