Введение в программирование

Статические члены класса


Переменные и члены класса, объявленные с модификатором доступа static, называются статическими членами класса. Cтатические переменные и методы доступны без создания объекта данного класса. Имя статической переменной квалифицируется именем класса с использованием операции принадлежности :: , а не именем экземпляра класса.

Например:

class A { public: static int iStat; }; int main(int argc, char* argv[]) { A:: iStat = 123; }

Статические методы могут вызывать и использовать только другие статические методы и статические переменные. Из статического метода нельзя выполнять вызов не статического метода - члена класса.

Статическую переменную можно рассматривать как аналог глобальной переменной, которая связана с конкретным классом.

Часто статические переменные называют переменными класса, а не статические переменные - переменными экземпляра.

Для статических переменных могут использоваться указатели.

Например:

class A { public: static int iStatVar; }; int main(int argc, char* argv[]){ int A:: iStatVar = 0; int *piStatVar = &A:: iStatVar; }

При использовании статических переменных указатели всегда являются указателями на существующий тип (в данном примере на тип int), а не на тип класса.

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

  1. Объявить (как правило, в заголовочном файле) статическую переменную как член класса.

    Например: static int iStat;.

  2. Для выделения памяти под эту переменную ее повторно следует объявить в модуле компиляции, в котором она будет использоваться, квалифицируя имя статической переменной именем класса.

    Например: int A::iStat;

  3. Выполнить инициализацию статической переменной (по умолчанию статическая переменная типа int имеет значение 0).

    Например: A::iStat=123;

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


имя_класса::имя_конструктора : имя_стат_переменной(значение) { }

нельзя ни в каком случае.

Для того чтобы создать статический метод - член класса в среде Visual C++, достаточно выделить в окне Class View секцию с именем класса, в который будет вставлен создаваемый метод, и выполнить команду контекстного меню Add|Add Function. А затем определить тип и имя создаваемого метода, список параметров, и отметить флажок Static, указывающий на то, что создаваемая функция будет статической.

В результате выполненных действий среда Visual C++ добавит в заголовочный файл класса прототип создаваемой статической функции, а в файл реализации - код реализации создаваемой статической функции.

Например:

class A {public: a1(void); ~a1(void); int Fx1(int i1); int Fx2(int i2); protected: static int Fstat1(void); // Статическая функция доступна //только для статических методов - членов //данного класса и наследуемых классов public: static int Fstat2(void); // Общедоступная статическая функция };

int main(int argc, char* argv[]){ std::cout<<a1::Fstat2(); // Вызов статической функции }

Реализация статической функции записывается так же, как и реализация любого другого метода - члена класса. При этом ключевое слово static не указывается.

Например:

int A::FStat1(void) { return 0; }


Содержание раздела