Statyczne elementy członkowskie danych (C++)
Klasy mogą zawierać statyczne elementy członkowskie danych i funkcje członkowskie.Kiedy element członkowski danych jest zadeklarowany jako static, dla wszystkich obiektów klasy zachowywana jest tylko jedna kopia danych. (Aby uzyskać więcej informacji, zobacz Statyczne funkcje członkowskie.)
Statyczne elementy członkowskie danych nie są częścią obiektów danego typu klasy; są oddzielnymi obiektami.W rezultacie deklaracja statycznego elementu członkowskiego danych nie jest uważana jako definicja.Element członkowski danych jest zadeklarowany w zakresie klasy, ale definicja jest wykonywana w zakresie pliku.Te statyczne elementy członkowskie mają połączenia zewnętrzne.Ilustruje to poniższy przykład:
// 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()
{
}
W poprzednim kodzie, element członkowski bytecount jest zadeklarowany w klasie BufferedOutput, ale musi być zdefiniowany poza deklaracją klasy.
Do statycznych elementów członkowskich danych można odwołać się bez odwoływania się do obiektu typu klasy.Liczbę bajtów zapisanych za pomocą obiektów BufferedOutput można uzyskać w następujący sposób:
long nBytes = BufferedOutput::bytecount;
Aby statyczny element członkowski mógł istnieć, nie ma potrzeby, aby istniały jakiekolwiek obiekty typu klasy.Do statycznych elementów członkowskich można także uzyskać dostęp przy użyciu operatorów wyboru elementu członkowskiego (. i –>).Na przykład:
BufferedOutput Console;
long nBytes = Console.bytecount;
W poprzednim przypadku, odwołanie do obiektu (Console) nie jest szacowane; zwracana jest wartość statycznego obiektu bytecount.
Statyczne elementy członkowskie podlegają zasadom dostępu do członków klasy, więc prywatny dostęp do statycznych elementów członkowskich danych jest dozwolony tylko dla funkcji będących elementami członkowskimi klasy i elementów zaprzyjaźnionych.Zasady te opisano w Kontrola dostępu do elementów członkowskich.Wyjątkiem jest, że statyczne elementy członkowskie danych muszą być zdefiniowane w zakresie pliku, bez względu na ich ograniczenia dostępu.Jeżeli element członkowski danych ma być jawnie zainicjowany, należy dostarczyć definicję do inicjatora.
Typ statycznego elementu członkowskiego nie jest kwalifikowany przez nazwę jego klasy.W związku z tym typem BufferedOutput::bytecount jest long.