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