В объектно-ориентированного программирования с классами , переменная класса является любая переменная объявлена с static
модификатором из которых существует в единственном экземпляре, независимо от того, сколько экземпляров этого класса существуют. [1] [2] [3] [4] [5] Обратите внимание, что в Java термины «поле» и «переменная» взаимозаменяемы для переменных-членов .
Переменная класса не является переменной экземпляра . Это особый тип атрибута класса (или свойства класса, поля или члена данных). Та же дихотомия между членами экземпляра и класса применима и к методам («функциям-членам»); класс может иметь как методы экземпляра и методы класса .
Статические переменные-члены и статические функции-члены [ править ]
В некоторых языках переменные класса и методы класса разрешаются либо статически, а не через динамическую отправку , либо их память статически выделяется во время компиляции (один раз для всего класса как статические переменные ), а не выделяется динамически во время выполнения (при каждом создании объект). В других случаях, однако, один или оба из них являются динамическими. Например, если классы могут быть определены динамически (во время выполнения), переменные класса этих классов выделяются динамически, когда класс определяется, а в некоторых языках методы класса также отправляются динамически.
Таким образом, в некоторых языках статическая переменная-член или статическая функция-член используются как синонимы или вместо «переменной класса» или «функции класса», но они не являются синонимами для разных языков. Эти термины обычно используются в Java , C # [5] и C ++ , где переменные класса и методы класса объявляются с static
ключевым словом и называются статическими переменными-членами или статическими функциями-членами .
Пример [ править ]
struct Request { статическое целое число ; int число ; Request () { число = количество ; // изменяет переменную экземпляра this-> number ++ count ; // изменяет переменную класса Request :: count }};int Request :: count = 0 ;
В примере этого C ++ переменная класса Request::count
будет увеличиваться при каждом вызове к конструктору , так что Request::count
всегда содержит число запросов , которые были построены, и каждый новый объект запроса дается number
в последовательном порядке. Поскольку count
это переменная класса, существует только один объект Request::count
; напротив, каждый объект запроса содержит собственное отдельное number
поле.
Также обратите внимание, что переменная Request::count
инициализируется только один раз.
Заметки [ править ]
- ^ «Учебник по Java, переменные» . Проверено 21 октября 2010 .
- ^ «Учебное пособие по Java, понимание экземпляров и членов классов» . Проверено 21 октября 2010 .
- ^ «Справочник по языку Python, составные утверждения» . Проверено 21 октября 2010 .
- ^ "Справочник по времени выполнения Objective-C" . Разработчик Apple . Проверено 1 апреля 2018 года .
- ^ a b «Переменные класса в C #» . Syntaxdb . Проверено 1 апреля 2018 года .