Кратко
- Статические члены класса (
static
) - это переменные и функции, которые принадлежат самому классу, а не его экземплярам. Это значит, что все экземпляры класса разделяют одни и те же статические члены. Объявляются сstatic
, инициализируются вне класса. - Статические функции-члены: Могут вызываться без создания экземпляра класса, объявляются с
static
. - Применение: Подсчет объектов, глобальные настройки, общие ресурсы.
Подробнее
Статические переменные-члены
Статическая переменная-член объявляется внутри класса с использованием ключевого слова static
и инициализируется вне класса.
class MyClass {
public:
static int staticData; // Объявление статической переменной-члена
};
// Определение и инициализация статической переменной-члена
int MyClass::staticData = 0;
int main() {
MyClass obj1;
MyClass obj2;
// Доступ к статической переменной через объект или класс
obj1.staticData = 5;
std::cout << MyClass::staticData << std::endl; // 5
std::cout << obj2.staticData << std::endl; // 5
return 0;
}
Статические функции-члены
Статическая функция-член объявляется и определяется с использованием ключевого слова static
. Она может быть вызвана без создания экземпляра класса.
class MyClass {
public:
static void staticFunction() {
std::cout << "Static function called" << std::endl;
}
};
int main() {
// Вызов статической функции через класс
MyClass::staticFunction();
// Вызов статической функции через объект
MyClass obj;
obj.staticFunction();
return 0;
}
Примеры использования
- Подсчет количества созданных объектов:
class Counter {
public:
static int count; // Статическая переменная для подсчета объектов
Counter() {
count++;
}
~Counter() {
count--;
}
static int getCount() {
return count;
}
};
int Counter::count = 0;
int main() {
Counter obj1;
Counter obj2;
std::cout << "Number of objects: " << Counter::getCount() << std::endl; // 2
{
Counter obj3;
std::cout << "Number of objects: " << Counter::getCount() << std::endl; // 3
}
std::cout << "Number of objects: " << Counter::getCount() << std::endl; // 2
return 0;
}
- Глобальные настройки для всех экземпляров:
class Settings {
public:
static int globalSetting;
static void setGlobalSetting(int value) {
globalSetting = value;
}
static int getGlobalSetting() {
return globalSetting;
}
};
int Settings::globalSetting = 0;
int main() {
Settings::setGlobalSetting(10);
std::cout << "Global setting: " << Settings::getGlobalSetting() << std::endl; // 10
return 0;
}