다음을 통해 공유


정적 데이터 멤버 (C++)

클래스 멤버 함수 및 정적 멤버가 데이터를 포함할 수 있습니다.때 데이터 멤버 선언으로 정적, 클래스의 모든 개체에 대해 하나의 데이터 복사본이 유지 됩니다.(자세한 내용은 정적 멤버 함수입니다.)

정적 데이터 멤버 개체는 특정된 클래스 형식의 일부가 아닙니다. 이러한 별도 개체입니다.따라서, 정적 데이터 멤버의 선언에 정의 간주 되지 않습니다.데이터 멤버는 클래스 범위에 선언 된 있지만 정의 파일 범위에서 수행 됩니다.이러한 정적 멤버에는 외부 링크가 있어야 합니다.다음 예제는 이러한 과정을 보여 줍니다.

// static_data_members.cpp
class BufferedOutput
{
public:
   // Return number of bytes written by any object of this class.
   short BytesWritten()
   {
      return bytecount;
   }

   // Reset the counter.
   static void ResetCount()
   {
      bytecount = 0;
   }

   // Static member declaration.
   static long bytecount;
};

// Define bytecount in file scope.
long BufferedOutput::bytecount;

int main()
{
}

앞의 코드에서 멤버 bytecount 클래스에서 선언 된 BufferedOutput, 있지만 바깥쪽 클래스 선언을 정의 해야 합니다.

정적 데이터 멤버가 클래스 형식의 개체를 참조 하지 않고 참조할 수 있습니다.사용 하 여 작성 된 바이트 수를 BufferedOutput 개체를 다음과 같이 얻을 수 있습니다.

long nBytes = BufferedOutput::bytecount;

정적 멤버에는 클래스 형식의 개체가 존재 하는지 필요는 없습니다.정적 멤버는 액세스할 수 멤버 선택을 사용 하 여 (.->) 운영자입니다.예를 들면 다음과 같습니다.

BufferedOutput Console;

long nBytes = Console.bytecount;

앞의 경우 개체에 대 한 참조 (Console) 계산 됩니다. 반환 되는 값은 정적 개체의 bytecount.

개인 액세스 정적 데이터 멤버를 클래스 멤버 함수 및 친구에 대해서만 사용할 수 있도록 정적 데이터 멤버 클래스 멤버 액세스 규칙이 적용 됩니다.이러한 규칙에 나와 멤버 액세스 제어.정적 데이터 멤버의 액세스 제한에 관계 없이 파일 범위에서 정의 해야 되지 않습니다.데이터 멤버를 명시적으로 초기화 되는 경우 이니셜라이저는 정의를 제공 합니다.

형식의 정적 멤버는 클래스 이름으로 한정 되지 않습니다.따라서 형식입니다 BufferedOutput::bytecount 입니다 long.

참고 항목

참조

클래스, 구조체 및 공용 구조체