정적 멤버 변수 / 정적 멤버 함수
- 정적(static) 멤버 변수 / 정적(static) 멤버 함수
클래스 내에 static으로 선언하면, 클래스에서 공유할 수 있는 멤버 변수, 멤버 함수가 된다.
=> static은 지역 변수와 전역 변수의 성질을 가지고 있음. 그래서 클래스 내에 static 멤버는 클래스로 접근을 제한하면서, 전역 변수처럼 프로그램이 시작될 때 데이터 영역에 할당되어 프로그램이 종료될 때 해지됨.
static 키워드를 사용하면, 프로그램 시작됐을 때 전역 변수와 함께 데이터 영역에 할당된다. 그렇기 때문에 객체가 생성되어 있지 않아도 static으로 선언된 멤버 변수/함수는 호출 가능하다.
일반 변수/함수와는 달리, Class:: 을 붙이고 사용한다. 변수를 초기화할 때도 마찬가지로 Class:: 을 붙여야 한다.
정적 멤버 함수는 Class::를 붙이지 않고 함수 이름만으로도 사용가능하다. 그리고 정적 멤버 함수 내에서는 일반 멤버를 참조할 수 없다. 왜냐하면 정적 멤버 함수는 어떤 객체에 의한 호출이 아니기 때문에 객체 생성 이전에도 호출할 수 있고, this를 전달받지 않기 때문이다. (일반 멤버 앞에는 암시적으로 this->가 붙는다고 한다.)
- error LNK2001
무의식적으로 init()에 Class::value = 0; 했다가 에러뜸. 클래스가 공유하는 변수이므로, 객체가 생성될 때마다 초기화 되는 것은 말이 안됨. 매번 초기화하면 클래스에서 공유할 필요가 없음.
그리고 static 멤버는 전역 변수의 성질을 가지고 있으므로, main() 호출 전에 초기화되어야 함. 소스 파일의 함수 외부에 static 멤버 변수 초기화문 적어주면 해결.