Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP.DOC
Скачиваний:
13
Добавлен:
03.05.2019
Размер:
618.5 Кб
Скачать

Статические переменные-члены класса

Если различать переменные по областям их видимости, то мы сталкивались до сих пор с переменными двух видов: глобальными и локальными.

Глобальные переменные объявляются вне всех функций программы (обычно перед главной функцией WinMain()); значения этих переменных видны во всех точках программы, в том числе во всех ее функциях и блоках. Глобальные переменные используются для передачи некоторых значений из одной функции в другую. Например, в типичном приложении Windows инструменты рисования (кисти, перья, шрифты) создаются обычно в процессе создания окна в функции OnCreate(), однако используются эти объекты в другой функции – именно, OnPaint(). Для того, чтобы передать дескриптор hPen созданного в функции OnCreate() пера в фун­кцию OnPaint(), его следует объявить глобальным.

Локальные переменные объявляются внутри той функции, в которой они будут использоваться; ни в какой другой функции (и, в частности, в функции WinMain()) эти переменные не видны. Таким образом, локальные переменные используются для хранения временных значений, которые нужны только в процессе выполнения данной функции. Кстати, в отличие от глобальных переменных, которые после инициализации сохраняют свои значения неограниченно долго, локальные переменные при каждом новом вызове функции, в которой они объявляются, теряют свои предыдущие значения, и их следует инициализировать заново.

Какова область видимости членов классов? Открытые данные видны, естественно, всюду в программе или, точнее, всюду в той функции, в которой был создан объект класса (если объект класса объявлен и создан в некоторой функции, то он представляет собой локальную переменную, которая при завершении функции уничтожается и, таким образом, не видна нигде кроме этой функции).

У закрытых данных-членов класса область видимости ýже, так как к ним можно обратиться только из функций-членов данного класса. При этом каждое данное-член в каждом объекте имеет свое значение Таким образом, закрытые данные не могут служить для передачи информации между объектами

Статическая переменная, объявленная в качестве закрытого данного-члена класса, выступает для объектов этого класса в качестве глобальной переменной. Все объекты класса имеют к ней доступ, и для всех объектов она, в отличие от обычных данных-членов, имеет одно и то же значение. Происходит это потому, что компилятор, выделяя для обычных данных каждого объекта свою отдельную область памяти, статическую переменную размещает в памяти только один раз (рис. 1.1).

Рис. 1.1 Несколько объектов класса Men со статической переменной counter

Любой объект класса может обращаться к статической переменной, читая или модифицируя ее значение; после такой модификации для всех объектов данного класса статическая переменная будет видна с этим новым значением.

Статическая переменная объявляется в составе закрытых данных класса со спецификатором класса памяти static и обязательно с указанием начального значения (например, 0):

class Men{

static int counter = 0;

...

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]