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; правильно

}

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

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

Hosted by uCoz