Ключевое слово static
Ключевое слово static в языке C++ имеет несколько значений в зависимости от контекста использования. Оно может применяться к локальным переменным внутри функций, к глобальным переменным и функциям, а также к членам классов. В первом случае оно продлевает время жизни локальной переменной до конца выполнения программы, сохраняя её значение между вызовами функции. Во втором - ограничивает область видимости переменной или функции текущим файлом. В третьем - делает член класса общим для всех объектов этого класса, а не принадлежащим конкретному экземпляру.
Синтаксис
// Локальная статическая переменная
static тип имя;
// Глобальная статическая переменная или функция
static тип имя;
// Статический член класса
class ClassName
{
static тип имя;
};
Пример
Давайте создадим функцию, внутри которой объявлена статическая переменная. При каждом вызове функции эта переменная будет сохранять своё предыдущее значение:
#include <iostream>
using namespace std;
void counter()
{
static int count = 0;
count++;
cout << count << endl;
}
int main()
{
counter();
counter();
counter();
return 0;
}
Результат выполнения кода:
1
2
3
Пример
Давайте создадим класс, в котором есть статический член. Такой член принадлежит самому классу, а не его объектам, и существует в единственном экземпляре:
#include <iostream>
using namespace std;
class MyClass
{
public:
static int value;
};
int MyClass::value = 10;
int main()
{
MyClass obj1;
MyClass obj2;
cout << obj1.value << endl;
cout << obj2.value << endl;
MyClass::value = 20;
cout << obj1.value << endl;
cout << MyClass::value << endl;
return 0;
}
Результат выполнения кода:
10
10
20
20
Пример
Давайте создадим статическую локальную переменную внутри функции, которая инициализируется только один раз, а затем просто возвращает накопленное значение:
#include <iostream>
using namespace std;
int getNextId()
{
static int id = 100;
return id++;
}
int main()
{
cout << getNextId() << endl;
cout << getNextId() << endl;
cout << getNextId() << endl;
return 0;
}
Результат выполнения кода:
100
101
102