logo
ООП 2012

34) Статические компоненты классов.

Класс - это тип, а объект - конкретный представитель этого класса в программе. Для каждого объекта существует своя копия полей класса. Если все объекты одного типа используют некоторые данные совместно, то возникает проблема размещения этих данных и обеспечения их доступности из всех объектов класса. Решение возможно путем

применения механизма статических компонент.

Статическими называются компоненты класса, объявленные с модификатором памяти static. Такие компоненты являются частью класса, но не включаются в объекты этого класса. Имеется ровно одна копия статических полей класса - общая для всех объектов данного класса, которая существует даже при отсутствии объектов данного класса. Инициализация статических полей класса осуществляется только вне определения класса, но с указанием описателя видимости <имя класса>::.

Принципиально любой метод класса может обратиться к статическому полю и изменить его значение. Но существует возможность обращения к статическим полям класса при отсутствии объектов данного класса. Такой доступ осуществляется с помощью статических компонентных функций - компонентных функций, объявленных со спецификатором static. Статические функции не ассоциируются с каким-либо объектом и не получают параметра this. Следовательно, ови не могут без указания объекта обращаться к нестатическим полям класса. При необходимости ссылка на конкретный объект может быть передана в списке параметров, и тогда статическая функция может обратиться к нестатическим полям объекта следующим образом: <имя объекта>.<имя нестатического поля класса>. При обращении к статическим полям класса такой проблемы не возникает.

При обращении к статическим компонентам класса, являющимся принадлежностью всех объектов данного класса, можно вместо имени объекта указать имя класса:

<класс>: :<компонент>.