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 подскажет развёрнутый ответ в реальном времени.