1) При обращении к данным из компонентных функций используется только
имя компонента
2) При обращении к компонентам из операторов, выполняемых вне класса
(если позволяет статус доступа)
Имя объекта. имя компонента
указатель на объект -> имя компонента
3) Данные класса (а также компонентные функции) не обязательно должны быть описаны до первого обращения к ним в классе. Т.е. все компоненты класса видны во всех операторах его тела.
В связи с этим отличием введена особая область видимости – класс (наряду с файлом, блоком и функцией).
4) Каждый объект класса имеет свою копию данных класса, кроме статических данных. Статический компонент (static) не тиражируется, существует в единственном экземпляре
Статические компоненты класса необходимо описывать и инициировать
вне определения класса как глобальные переменные.
Обращаться к ним можно до определения первого объекта класса с
помощью квалифицированного имени:
Имя класса::имя компонента
Если объекты объявлены, то к статическому компоненту можно
|
|
обращаться стандартно, и всякое изменение статического компонента в одном объекте становится видно во всех объектах.
Если статический элемент имеет статус private или protected к нему можно обращаться только из компонентных функций. Если надо обратиться до определения объектов, надо ввести статическую компонентную функцию, со спецификатором static, которую можно вызывать до определения объектов с помощью квалифицированного имени:
Имя класса::имя статической функции (параметры)
Пример:
Class cot
{ …;
static int N; // статический компонент
public: …
static void count(int value) { N = value};
};
int cot::N=0; // внешняя инициализация статического элемента