Statyczne elementy członkowskie (C++)
Klasy mogą zawierać statyczne dane składowe i funkcje składowe. Gdy element członkowski danych jest zadeklarowany jako static
, tylko jedna kopia danych jest przechowywana dla wszystkich obiektów klasy.
Statyczne składowe danych nie są częścią obiektów danego typu klasy. W związku z tym deklaracja elementu członkowskiego danych statycznych nie jest uznawana za definicję. Składowa danych jest zadeklarowana w zakresie klasy, ale definicja jest wykonywana w zakresie pliku. Te statyczne elementy członkowskie mają powiązania zewnętrzne. Zostało to przedstawione w poniższym przykładzie:
// 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.
Statyczne składowe danych można odwoływać się bez odwoływania się do obiektu typu klasy. Liczbę bajtów zapisywanych przy użyciu BufferedOutput
obiektów można uzyskać w następujący sposób:
long nBytes = BufferedOutput::bytecount;
Aby statyczny element członkowski istniał, nie jest konieczne, aby istnieją żadne obiekty typu klasy. Dostęp do statycznych elementów członkowskich można również uzyskać przy użyciu operatorów zaznaczenia składowego (i ->). Przykład:
BufferedOutput Console;
long nBytes = Console.bytecount;
W poprzednim przypadku odwołanie do obiektu (Console
) nie jest obliczane; zwracana wartość to odwołanie do obiektu bytecount
statycznego .
Statyczne składowe danych podlegają regułom dostępu do składowych klasy, więc prywatny dostęp do statycznych składowych danych jest dozwolony tylko dla funkcji składowych klasy i znajomych. Te reguły opisano w temacie Kontrola dostępu do składowych. Wyjątkiem jest to, że statyczne elementy członkowskie danych muszą być zdefiniowane w zakresie plików niezależnie od ograniczeń dostępu. Jeśli element członkowski danych ma być jawnie zainicjowany, należy podać inicjator z definicją.
Typ statycznego elementu członkowskiego nie jest kwalifikowany przez jego nazwę klasy. W związku z tym typ to BufferedOutput::bytecount
long
.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla