Easynamespace

Чем namespace отличается от class?

1Постановка

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

2Решение

Namespace — логическая группировка имён, не создаёт объектов. Class — создаёт тип, объекты которого хранят данные; имеет инкапсуляцию, наследование, virtual.

// namespace: набор утилит, без состояния
namespace Math {
    int add(int a, int b);
    constexpr double PI = 3.14159;
}
int x = Math::add(1, 2);

// class: тип с состоянием и поведением
class Counter {
    int count_ = 0;
public:
    void inc() { ++count_; }
};
  • Namespace: для свободных функций, типов, констант — можно reopen в нескольких файлах;
  • Class: для типов с состоянием и поведением;
  • Внутри namespace: inline namespace (версионирование), анонимные namespace (internal linkage).

Выбор семантический: объект с состоянием → class, набор утилит → namespace.

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

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

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