Elementy danych statyczne (C++)
Klasy może zawierać dane członka statycznego i funkcji elementów członkowskich.Kiedy członek danych jest zadeklarowana jako statyczne, tylko jedna kopia danych jest utrzymywana dla wszystkich obiektów tej klasy.(Aby uzyskać więcej informacji, zobacz Statyczne funkcji elementów członkowskich.)
Członkowie dane statyczne nie są częścią obiektów typu danej klasy; są one oddzielnymi obiektami.W efekcie deklaracji członka statycznego danych nie jest uważany za definicję.Członek danych jest zadeklarowana w zasięgu klasy, ale definicji odbywa się w zakresie pliku.Te elementy statyczne mają powiązania zewnętrznych.Poniższy przykład ilustruje to:
// 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 członka bytecount jest zadeklarowana w klasie BufferedOutput, ale musi być zdefiniowana poza deklaracji klasy.
Dane statyczne członków można dalej bez odwoływania się do obiektu typu klasy.Liczba bajtów zapisanych przy użyciu BufferedOutput obiektów można uzyskać w następujący sposób:
long nBytes = BufferedOutput::bytecount;
Członka statycznego istnieją nie jest konieczne, że istnieją obiekty typu klasy.Elementy statyczne również można uzyskać dostęp przy użyciu wybór elementów członkowskich (. i ->) operatorów.Na przykład:
BufferedOutput Console;
long nBytes = Console.bytecount;
W poprzednim przypadku, odwołanie do obiektu (Console) nie jest oceniany; wartość zwracany jest obiekt statyczny bytecount.
Dane statyczne Członkowie związani są zasady dostępu Członek klasy, więc prywatny dostęp do danych statycznych członków jest dozwolony tylko w przypadku funkcji składowej klasy i przyjaciół.Zasady te są opisane w Kontroli dostępu Członkowskie.Wyjątkiem jest tego dane statyczne, które członkowie muszą być zdefiniowane w zakresie pliku niezależnie od ich ograniczenia dostępu.Jeśli członek danych jest wyraźnie zainicjowane, inicjator muszą być wyposażone w definicji.
Typ członka statycznego nie kwalifikuje się przy użyciu jego nazwy klasy.W związku z tym, typ BufferedOutput::bytecount jest long.