2012-07-11 3 views
4

.cpp 파일에는 여러 클래스 정의가 있습니다. 클래스가 정의개인 정적 선언 및 후속 초기화

class SomeClass:public SomeParentClass 
{ 
    private: 
    static int count; 
}; 

및 직후에 다음과 같이 카운트 특성이 0으로 초기화 할 : 다음과 같이 하나 개의 클래스는 개인 정적 멤버가

int SomeClass::count = 0; 

를 자바/C#을 세계에서 오는 I 어느 시점에서 count이 0으로 초기화되었는지 이해하는 데 어려움이 있습니까? SomeClass이 인스턴스화 될 때입니까? 또한 클래스 정의의 count 유형은 int이며, SomeClass::count의 앞에는 int이 있어야합니까?

그리고 내 마지막 질문은 count 속성이 private이기 때문에 클래스 정의 외부에서 초기화 될 때 가시성을 제한해서는 안된다는 것입니다.

감사

답변

4
  1. 정적 멤버는 클래스에서 프로그램의 시작
  2. static int count;에 정적 변수의 선언in arbitrary order입니다 초기화됩니다. C++의 모든 정의에는 유형을 지정해야합니다.
  3. 파일 범위에서 카운트 정의가 발생했기 때문에 SomeClass::count의 실제 범위는 선언 된대로 비공개로 유지됩니다.
3

정적 변수는 프로그램이 시작될 때 0으로 초기화되는 경우로 동작합니다 클래스입니다. 클래스 인스턴스화와는 별개입니다.

C++ 언어는 식별자 앞에 식별자가 있어야합니다.

클래스 정적 변수를 초기화하는 C++ 구문은 전역 변수처럼 보이지만 컴파일하는 동안 변수에 대한 액세스가 강제로 적용됩니다.

3
Is it when the SomeClass is instantiated?

아니, 당신은 SomeClass::count를 통해 액세스 할 수있는 인스턴스 생성하기 전에 (이 함수를 가정하는 것은 SomeClass의 개인 회원에 대한 권한이). 객체를 만들기 전에 완전히 사용할 수 있습니다.


Why does the SomeClass::count has to have an int in front of it?

음,이 int 때문에. 만약 함수와 프로토 타입을 정의 할 때 생각해

int func (int); 
int func (int i) {return 1;} //you still need the int and (int i) here 
func {return 1;} //NOT VALID - this is what count would be without int 

Since the count attribute is private shouldn't its visibility be 
restricted when it is initialized outside the class definition?

정적 변수 정의 this answer에 따라 일반적인 방법으로 정의 할 때 지정자 액세스하는 예외이다. int SomeClass::count = 0;정의 동안 클래스의