21 Статические элементы классов с++.
Спецификатор класса памяти static
м.б. использован в объявлении
элементов данных и методов.
Такие элементы называются статическими и
имеют свойства, отличные от свойств нестатических элементов. В случае
нестатических элементов для каждого объекта в классе существует отдельная
копия.
В случае статических элементов существует
только одна копия, доступ к ней выполняется без ссылки на
конкретный об-т класса. На статический элемент класса
можно ссылаться, даже если об-т этого класса еще не
создан.
class A
{
static int A;
static func();
}
b=A::A;
A::func();
Поскольку статический метод может вызываться
без учета конкретного объекта, то он не имеет указателя this.
Из этого следует, что статический метод не имеет доступа к нестатическим компонентам
без явного задания объекта.
Пример:
class X
{
int
member;
static Func(int i,
X*ptr);
}
X:: Func(int
i, X*ptr);
{
member = i; неправильно
ptr
-> member=i; правильно
}
Статические методы глобальных классов имеют
внешний тип компоновки. Статические методы не могут являться виртуальными
функциями. Недопустимо иметь статические и нестатические методы с одинаковыми
именами и типами аргументов. Объявление статического элемента данных в
определении класса не является его определением, поэтому где-нибудь еще должно
быть определение, отвечающее за распределение памяти и инициализацию.
Главное назначение статических элементов состоит в том, чтобы
отслеживать данные, общие для всех объектов класса (число созданных объектов,
последний используемый ресурс), уменьшение числа видимых глобальных имен.