Бьерн Страуструп - Абстракция данных в языке С++ - Статические члены

ОГЛАВЛЕНИЕ

 

Статические члены

      Класс - это тип, а не объект данных и каждый объект класса
  имеет свою копию данных - членов класса. Однако есть приложения,
  абстрактную реализацию которых лучше проводить в предположении,
  что различные объекты класса разделяют некоторые данные.
  Например, для управления задачами в операционной системе или в
  модели, часто используется список всех задач :

      class task {
            . . .
            task* next;
            static task* task_chain;
            void shedule (int);
            void wait (event);
            . . .
      };

__________
  (*1) В оригинале - member functions. - прим.переводчика.

  Объявление члена t a s k _ c h a i n статическим (s t a t i c)
  означает, что будет существовать только одна его копия, а не по
  одной копии на каждый объект t a s k . Он, однако, по-прежнему
  в поле видимости класса t a s k , и доступен "снаружи" только
  если он объявлен как p u b l i c . В этом случае его имя может
  быть определено именем его класса :

      t a s k :: task_chain  

      В составляющих функциях на него можно ссылаться просто как
  t a s k _ c h a i n . Использование статических членов класса
  может значительно уменьшить необходимость в глобальных
  переменных.
      Знак операции :: (двойное двоеточие) используется для
  указания видимости имени в выражениях. Как унарная операция она
  обозначает внешние (глобальные) имена. Например, если в модели
  операционной системы функции w a i t класса t a s k необходим
  вызов несоставляющей функции w a i t , это может быть сделано
  таким образом :

      void task.wait(event  e) 
      {
            . . .
            ::wait(e);
      }