Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В объектно-ориентированного программирования с классами , переменная класса является любая переменная объявлена с 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инициализируется только один раз.

Заметки [ править ]

  1. ^ «Учебник по Java, переменные» . Проверено 21 октября 2010 .
  2. ^ «Учебное пособие по Java, понимание экземпляров и членов классов» . Проверено 21 октября 2010 .
  3. ^ «Справочник по языку Python, составные утверждения» . Проверено 21 октября 2010 .
  4. ^ "Справочник по времени выполнения Objective-C" . Разработчик Apple . Проверено 1 апреля 2018 года .
  5. ^ a b «Переменные класса в C #» . Syntaxdb . Проверено 1 апреля 2018 года .