Easystatic

Что такое static-члены класса и как их использовать?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Static-член — один экземпляр на весь класс, не на объект. Static-поле требует определения в .cpp (до C++17). Static-метод не имеет this, может обращаться только к static-членам.

// header.h
class Counter {
    static int count_;          // объявление
public:
    Counter() { ++count_; }
    static int get() { return count_; }   // нет this
    static inline int max = 100;          // C++17: определение в заголовке
};

// counter.cpp
int Counter::count_ = 0;       // определение (НЕ в заголовке!)

Counter::get();   // доступ без объекта
  • Применение: счётчики объектов, фабрики, утилиты (Math::sqrt), singleton;
  • C++17 inline static / constexpr static позволяют определить в заголовке без ODR-проблем;
  • Не злоупотреблять — глобальное состояние затрудняет тестирование и многопоточность.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.