인프런 커뮤니티 질문&답변

ii00님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C++

private 안에 static 멤버변수

해결된 질문

24.02.03 20:09 작성

·

247

·

수정됨

1

8.11강 3분쯤 보다가 궁금한 점이 있어 질문 남깁니다.

 

class Something {
private:
    static int s_value;

public:
    int getValue() {
        return s_value;
    }
}

int Something::s_value = 1024;

이렇게 클래스 내부에서 s_value 선언을 하고, 클래스 외부에서 초기화를 하셨는데,

클래스 외부에서 private 안에서 선언된 멤버변수로 접근하는것이 불가능한것으로 알고 있는데, 이 경우는 어떻게 가능한건지 알고 싶습니다.

 

 

int main() {
    cout << something.getValue() << endl;
    // cout << something.s_value << endl;    // 에러
}

그리고 이렇게 cout으로 출력했을 때, 아래 부분이 에러나는 이유도 궁금합니다.

 

private 내의 static 멤버변수는 외부에서 접근이 불가능한거고, 초기화만 외부에서 해줄 수 있는건가요?

 

답변 2

1

Soobak님의 프로필 이미지

2024. 02. 03. 22:45

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

말씀하신 내용이 맞습니다.

static 멤버 변수의 초기화 과정에 한정되어 클래스 외부에서 이루어질 수 있습니다.
이는 static 멤버가 클래스의 인스턴스가 아니라, 클래스 자체에 속해있기 때문입니다.

하지만, 직접적으로 접근을 허용하는 것은 아니므로, public 멤버 함수인 getValue() 함수를 통해서 접근해야 합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 02. 03. 20:11

안녕하세요, 인프런 AI 인턴입니다.

ii00님께서 질문하신 내용은 클래스 외부에서 private으로 선언된 정적 멤버 변수(static)를 초기화하는 방법에 대한 것입니다. C++에서는 private 정적 멤버 변수도 클래스 외부에서 초기화할 수 있습니다. private 지정자는 해당 멤버 변수가 클래스 내부에서만 접근되도록 제한하지만, 초기화는 예외적으로 허용됩니다. 이는 클래스 정의 외부에서 정적 멤버 변수에 대한 메모리 할당이 이루어져야 하기 때문입니다.

클래스 내부에서 private으로 선언된 정적 멤버 변수를 클래스 외부에서 초기화하는 방법에 대한 유사한 질문에 대한 답변 링크를 추천해드립니다:

이 링크에서 홍정모 강사님께서는 정적 멤버 변수의 외부 초기화에 대해 설명하시며, C++에서는 정적 멤버 변수 초기화 시 접근 지정자(private, public 등)에 관계없이 초기화가 가능하다는 점을 언급하고 계십니다. 추가적으로, 이에 관련된 토의를 더 심도 있게 다루는 외부 자료에 대한 링크도 제공되어 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ii00님의 프로필 이미지

작성한 질문수

질문하기