Zmienna klasy — Class variable
W programowaniu obiektowym z klas , o zmiennej klasy jakakolwiek zmienna zadeklarowana z static
modyfikatora których istnieje pojedyncza kopia, niezależnie od tego, ilu przypadkach na exist klasy. Zauważ, że w Javie terminy „pole” i „zmienna” są używane zamiennie dla zmiennej składowej .
Zmienna klasy nie jest zmienną instancji . Jest to specjalny typ atrybutu klasy (lub właściwości klasy, pola lub elementu danych). Ta sama dychotomia między instancją a członkami klasy dotyczy również metod ("funkcji składowych"); klasa może mieć zarówno metody instancji, jak i metody klasy .
Statyczne zmienne składowe i statyczne funkcje składowe
W niektórych językach zmienne klas i metody klas są albo rozwiązywane statycznie, nie przez dynamiczną dystrybucję , albo ich pamięć jest alokowana statycznie w czasie kompilacji (raz dla całej klasy, jako zmienne statyczne ), a nie dynamicznie alokowana w czasie wykonywania (przy każdym wystąpieniu obiekt). Jednak w innych przypadkach jedno lub oba są dynamiczne. Na przykład, jeśli klasy mogą być definiowane dynamicznie (w czasie wykonywania), zmienne klas tych klas są przydzielane dynamicznie, gdy klasa jest definiowana, a w niektórych językach metody klas są również wysyłane dynamicznie.
Dlatego w niektórych językach statyczna zmienna składowa lub statyczna funkcja składowa są używane jako synonimy lub zamiast „zmiennej klasy” lub „funkcji klasy”, ale nie są one synonimami w różnych językach. Terminy te są powszechnie używane w językach Java , C# i C++ , gdzie zmienne klasy i metody klasy są deklarowane za pomocą static
słowa kluczowego i określane jako statyczne zmienne składowe lub statyczne funkcje składowe .
Przykład
struct Request {
static int count;
int number;
Requestobject() {
number = count; // modifies the instance variable "this->number"
++count; // modifies the class variable "Request::count"
}
};
int Request::count = 0;
W tym przykładzie C++ zmienna klasy Request::count
jest zwiększana przy każdym wywołaniu konstruktora , dzięki czemu Request::count
zawsze przechowuje liczbę utworzonych Request, a każdy nowy obiekt Request otrzymuje number
kolejność sekwencyjną. Ponieważ count
jest zmienną klasy, istnieje tylko jeden obiekt Request::count
; w przeciwieństwie do tego, każdy obiekt Request zawiera własne, odrębne number
pole.
Zauważ też, że zmienna Request::count
jest inicjowana tylko raz.