static int a1; int a2;
class A { public: static void Method(const A& a); private: static int a1; int a2; }; void A::Method(const A& a) { int x = a1; int y = a2; int z = a.a2; } // обращение к статическому атрибуту // ошибка, a2 не определен // правильно
Статический атрибут класса во многом подобен глобальной переменной, но доступ к нему контролируется классом. Один статический атрибут класса создается в начале программы для всех объектов данного класса (даже если ни одного объекта создано не было). Можно считать, что статический атрибут – это атрибут класса, а не объекта.
Теперь программа, использующая генератор случайных чисел, будет выглядеть так:
// файл main.cpp #include "RandomGenerator.h" main() { RandomGenerator::Init(1000); } void fun1(void) { unsigned long x=RandomGenerator::GetNumber(); . . . }
// файл class.cpp #include "RandomGenerator.h" Class1::Class1() { . . . } void fun2() { unsigned long x=RandomGenerator::GetNumber(); . . . }
Такое построение программы и удобно, и надежно. В отличие от глобальной переменной, второй раз определить генератор невозможно – мы и первый-то раз определили его лишь фактом включения класса RandomGenerator в программу, а два раза определить один и тот же класс компилятор нам не позволит.
Разумеется, существуют и другие способы сделать так, чтобы существовал только один объект какого-либо класса.
Кратко суммируем результаты этого параграфа:
- Автоматические переменные заново создаются каждый раз, когда управление передается в соответствующую функцию или блок.
Статические и глобальные переменные создаются один раз, в самом начале выполнения программы. - К глобальным переменным можно обращаться из всей программы.
- К статическим переменным, определенным вне функций, можно обращаться из всех функций данного файла.
- Хотя использовать глобальные переменные иногда удобно, делать это следует с большой осторожностью, поскольку легко допустить ошибку (нет контроля доступа к ним, можно переопределить глобальную переменную).
Статические атрибуты класса существуют в единственном экземпляре и создаются в самом начале выполнения программы. Статические атрибуты применяют тогда, когда нужно иметь одну переменную, к которой могут обращаться все объекты данного класса. Доступ к статическим атрибутам контролируется теми же правилами, что и к обычным атрибутам. - Статические методы класса используются для функций, по сути являющихся глобальными, но логически относящихся к какому-либо классу.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий