-
[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