정적 멤버 (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 입니다.