MediumООП

Чем интерфейс (interface) в C++ отличается от Java/C#?

1Постановка

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

2Решение

В Java/C# интерфейс — отдельная конструкция: все методы abstract, нет полей, множественное наследование интерфейсов разрешено. В C++ нет ключевого слова interface — интерфейс выражается через абстрактный класс (все методы pure virtual, без данных).

// C++ «интерфейс» — абстрактный класс только с pure virtual
class IDrawable {
public:
    virtual void draw() const = 0;
    virtual ~IDrawable() = default;
};

// множественное наследование «интерфейсов» — безопасно
class Widget : public IDrawable, public IClickable {
    void draw() const override {}
};
  • Преимущество C++: можно миксовать интерфейс и реализацию в одном классе;
  • Недостаток: легко создать запутанные иерархии;
  • Идиома: I-prefix для interface-классов (IFoo), выделение «чистых интерфейсов» в отдельные классы.

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

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

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