Zmienna klasy — Class variable

W programowaniu obiektowym z klas , o zmiennej klasy jakakolwiek zmienna zadeklarowana z staticmodyfikatora 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ą staticsł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::countjest zwiększana przy każdym wywołaniu konstruktora , dzięki czemu Request::countzawsze przechowuje liczbę utworzonych Request, a każdy nowy obiekt Request otrzymuje numberkolejność sekwencyjną. Ponieważ countjest zmienną klasy, istnieje tylko jeden obiekt Request::count; w przeciwieństwie do tego, każdy obiekt Request zawiera własne, odrębne numberpole.

Zauważ też, że zmienna Request::countjest inicjowana tylko raz.

Uwagi