Qaupot Blog
Software Engineering, Trip

203. 정적 멤버

🕐 Thu, 06 Mar 2014 09:00:00 GMT 🕓 Thu, 26 Aug 2021 13:16:00 GMT

정적 멤버 (static member)

정적 멤버는 클래스의 모든 인스턴스가 같은 메모리 공간을 공유합니다.

  • 함수는 static 을 앞에 붙입니다.
  • 변수는 static 을 붙인 뒤, 별도의 전역 변수를 한번 더 선언해야 합니다.

정적 멤버 함수의 경우, 클래스 내의 멤버 중에서 정적 멤버만을 호출할 수 있습니다.

호출할 때는 클래스이름에 scope(::)를 붙인 뒤 멤버를 지정하여 사용합니다.

#include <iostream>

class Number
{
public:
    int num;
    static int staticNum;
    static int getNumber() 
    {
        return staticNum;
    }
};

int Number::staticNum;

int main(int argc, char** argv)
{
    Number::staticNum = 3;
    printf("%d %d\n", Number::getNumber(), sizeof(Number));

    return 0;
}
3 4

정적 멤버 변수는 전역 변수나 다른 기타 정적 변수와 마찬가지로, 힙이나 스택이 아닌 데이터 세그먼트 구역에 만들어집니다.

  • 프로그램 로드 시점에 메모리가 할당되고, 각각의 클래스 인스턴스 메모리 공간에는 포함되지 않습니다.

따라서 위의 sizeof(Number)의 결과는 정적 멤버 변수인 int staticNum 을 제외한 int num 크기인 4byte 입니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.