Static в С++

Static в С++Static — это ключевое слово в C++, используемое для придания элементу особых характеристик. Статические элементы инициализируются только один раз и сохраняют свое значение на протяжении всей программы.

Ключевое слово «static» можно разложить на:

  • Статические переменные-члены в классе
  • Объекты статического класса
  • Класс статических методов

Статические переменные-члены в классе

Статическая переменная никогда не размещается в стеке. Ей выделяется место на разных статических хранилищах. Это означает, что когда мы объявляем статическую переменную в классе, эта переменная используется всеми объектами этого класса.

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

Когда создается первый объект, все статические данные примитивного типа инициализируются нулем, если нет другой инициализации.

Как показано в приведенном ниже коде, у нас есть статическая переменная count как член примера класса. Обратите внимание, что мы инициализировали эту переменную явно вне класса с начальным значением = 0; Затем мы увеличиваем эту статическую переменную в конструкторе класса.

Давайте посмотрим на пример программы:

Вывод данных:

Count = 0
Count = 1
Count = 2

В основной функции мы создаем три разных объекта. В выводе видно, что значение статической переменной сохраняется между созданиями объекта и не сбрасывается при каждом создании объекта. Для первого объекта count = 0. Затем он увеличивается до 1. Для следующего объекта count = 1 и так далее.

Читать также:  Язык Java в сравнении с другими языками

Если бы счетчик был любой обычной переменной, то вывод данных был бы таким:

Count = 0
Count = 0
Count = 0

Объекты статического класса

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

Давайте рассмотрим пример для лучшего понимания работы объектов статического класса:

В этой программе есть класс xyz с конструктором и деструктором. В основной функции мы объявляем переменную x = 0; Если x равен нулю, мы создаем статический объект класса xyz.

Вывод данных:

Constructor::xyz
End Main
Destructor::xyz

Обычно, вывод данных должен был выводиться такой:

Constructor::xyz
Destructor::xyz
End Main

Но поскольку мы создаем статический объект, этот объект имеет область действия до конца программы, а не тогда, когда объект выходит из области видимости (конец оператора if). По этой причине деструктор объекта obj выполняется только после достижения конца основной функции.

Читать также:  Массивы C++ с примерами

Статические методы в классе

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

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

Кроме того, для статических методов класса нет указателя this.

Нам разрешено использовать объект и оператор точки для доступа к статическим методам класса, но рекомендуется использовать имя класса и оператор разрешения области для доступа к этим методам.

Ниже будет приведен пример использования статического метода в классе.

В этом примере мы определили две статические переменные-члены A и B и статический метод printValues. Переменные A и B инициализируются значениями 10 и 20 соответственно. В статическом методе printValues ​​значения A и B подвергаются постинкрементному и предварительному инкрементированию соответственно. После этого распечатываются значения.

В основном методе мы напрямую вызываем статический метод printValues, используя имя класса, поскольку нам не нужен какой-либо объект для вызова статических функций.

Вывод данных:

Value of A: 11
Value of B: 21

Итак, в выводе данных можно видеть, что значения обеих статических переменных изменяются в соответствии с выполняемыми над ними операциями.

Читать также:  Многопоточность в C++ с примерами

Назначение статических функций

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

Назначение статических функций можно резюмировать следующим образом:

  • Мы используем статические функции, когда эта функция не зависит от объекта для вызова и работы.
  • Еще одна цель использования статической функции — ограничение ее использования. В отличие от глобальных функций, доступ к статическим функциям ограничен файлом, в котором они находятся. Таким образом, чтобы ограничить доступ к функции, мы делаем ее статической.
  • Помимо двух вышеуказанных причин, мы используем статические функции, когда не хотим создавать объект класса только для выполнения функции, которая не ссылается ни на какие члены класса.

Итог

В заключение этой статьи мы можем сказать, что ключевое слово static в C++ может использоваться различными способами для объявления переменных, переменных-членов, объектов класса, методов и т.д.

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

В нашей следующей статье мы вам расскажем об абстракции в C++.

С Уважением, МониторБанк

Добавить комментарий