Переменная класса
В классов на основе объектно-ориентированном программировании — переменная класса это переменная, определенная в классе, для которой существует единственная копия, независимо от того, сколько экземпляров класса существует. [1] [2] [3] [4] [5]
Переменная класса не является переменной экземпляра . Это особый тип атрибута класса (или свойства класса, поля или элемента данных). Та же дихотомия между экземпляра и класса членами применима и к методам («функциям-членам»); класс может иметь как методы экземпляра , так и методы класса .
Статические переменные-члены и статические функции-члены
[ редактировать ]В некоторых языках переменные класса и методы класса либо разрешаются статически, а не посредством динамической диспетчеризации , либо их память статически выделяется во время компиляции (один раз для всего класса, как статические переменные ), а не выделяется динамически во время выполнения (при каждой реализации объект). Однако в других случаях один из них или оба являются динамическими. Например, если классы могут быть определены динамически (во время выполнения), переменные класса этих классов распределяются динамически при определении класса, а в некоторых языках методы класса также отправляются динамически.
Таким образом, в некоторых языках статическая переменная-член или статическая функция-член используются как синонимы или вместо «переменной класса» или «функции класса», но они не являются синонимами во всех языках. Эти термины обычно используются в Java , C# , [5] и C++ , где переменные класса и методы класса объявляются с помощью static
ключевое слово и называется статическими переменными-членами или статическими функциями-членами .
Пример
[ редактировать ]С++
[ редактировать ]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;
В этом примере C++ переменная класса Request::count
увеличивается при каждом вызове конструктора , так что Request::count
всегда содержит количество созданных запросов, и каждому новому объекту запроса присваивается number
в последовательном порядке. С count
это переменная класса, существует только один объект Request::count
; напротив, каждый объект Request содержит свои собственные отдельные number
поле.
Также обратите внимание, что переменная Request::count
инициализируется только один раз.
Питон
[ редактировать ]class Dog:
vertebrate_group = 'mammals' # class variable
dog_1 = Dog
print(dog_1.vertebrate_group) # accessing the class variable
В приведенном выше коде Python он не предоставляет много информации, поскольку в классе Dog есть только переменная класса, которая определяет группу позвоночных собак как млекопитающих. В переменной экземпляра вы можете настроить свой собственный объект (в данном случае Dog_1), имея одну или несколько переменных экземпляра в классе Dog.
Примечания
[ редактировать ]- ^ «Учебник по Java, переменные» . Проверено 21 октября 2010 г.
- ^ «Учебное пособие по Java: понимание членов экземпляра и класса» . Проверено 21 октября 2010 г.
- ^ «Справочник по языку Python, составные операторы» . Проверено 21 октября 2010 г.
- ^ «Справочник по времени выполнения Objective-C» . Разработчик Apple . Проверено 1 апреля 2018 г.
- ^ Jump up to: а б «Переменные класса в C#» . Синтаксическая база данных . Проверено 1 апреля 2018 г.