Zmienna klasy

W programowaniu obiektowym opartym na klasach zmienna klasy to zmienna zdefiniowana w klasie , której istnieje pojedyncza kopia, niezależnie od tego, ile instancji klasy istnieje .

Zmienna klasy nie jest zmienną instancji . Jest to specjalny typ atrybutu klasy (lub właściwości klasy, pola lub członka 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 klasy i metody klasy są rozwiązywane statycznie, a nie przez dynamiczną wysyłkę , lub ich pamięć jest alokowana statycznie w czasie kompilacji (raz dla całej klasy, jako zmienne statyczne ), a nie jest alokowana dynamicznie w czasie wykonywania (przy każdym wystąpieniu obiekt). Jednak w innych przypadkach jedno lub oba z nich są dynamiczne. Na przykład, jeśli klasy mogą być definiowane dynamicznie (w czasie wykonywania), zmienne klas tych klas są przydzielane dynamicznie podczas definiowania klasy, aw niektórych językach metody klas są również wywoływane dynamicznie.

Tak więc 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 klasowe i metody klasowe są deklarowane za pomocą słowa kluczowego static i określane jako statyczne zmienne składowe lub statyczne funkcje składowe .

Przykład

  

      
     

     
           
         
    



   0 struct  Żądanie  {  static  int  liczba  ;  int  liczba  ;  Obiekt żądania  ()  {  liczba  =  liczba  ;  // modyfikuje zmienną instancji "this->number"  ++  count  ;  // modyfikuje zmienną klasy "Request::count"  }  };  int  Żądanie  ::  liczba  =  ; 

W tym przykładzie C++ zmienna klasy Request::count jest zwiększana przy każdym wywołaniu konstruktora , tak że Request::count zawsze przechowuje liczbę utworzonych żądań, a każdemu nowemu obiektowi żądania jest przypisywany kolejny numer . Ponieważ count jest zmienną klasową, istnieje tylko jeden obiekt Request::count ; w przeciwieństwie do tego każdy obiekt żądania zawiera własne, odrębne liczbowe .

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

Notatki