Можно ли сдавать один и тот же тест несколько раз? |
C++: статические члены класса и виртуальные функции
Статические члены класса
Переменные и члены класса, объявленные с модификатором доступа 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 ), а не на тип класса.
Для того чтобы создать и использовать статическую переменную, следует:
- Объявить (как правило, в заголовочном файле) статическую переменную как член класса.
Например: static int iStat;.
- Для выделения памяти под эту переменную ее повторно следует объявить в модуле компиляции, в котором она будет использоваться, квалифицируя имя статической переменной именем класса.
Например: int A::iStat;
- Выполнить инициализацию статической переменной (по умолчанию статическая переменная типа int имеет значение 0 ).
Например: A::iStat=123;
Инициализацию статической переменной можно выполнять в теле конструктора в том случае, если при создании объекта с использованием этого конструктора память под статическую переменную уже выделена. Однако инициализировать статическую переменную через конструктор в форме
имя_класса::имя_конструктора : имя_стат_переменной(значение) { }
нельзя ни в каком случае.
Для того чтобы создать статический метод - член класса в среде Visual C++, достаточно выделить в окне Class View секцию с именем класса, в который будет вставлен создаваемый метод, и выполнить команду контекстного меню Add|Add Function. А затем определить тип и имя создаваемого метода, список параметров, и отметить флажок Static, указывающий на то, что создаваемая функция будет статической.
В результате выполненных действий среда Visual C++ добавит в заголовочный файл класса прототип создаваемой статической функции, а в файл реализации - код реализации создаваемой статической функции.
Например:
class a1 {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; }