Бьерн Страуструп - Абстракция данных в языке С++ - Статические члены
ОГЛАВЛЕНИЕ
Статические члены
Класс - это тип, а не объект данных и каждый объект класса
имеет свою копию данных - членов класса. Однако есть приложения,
абстрактную реализацию которых лучше проводить в предположении,
что различные объекты класса разделяют некоторые данные.
Например, для управления задачами в операционной системе или в
модели, часто используется список всех задач :
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);
}