Что такое интерфейсы в C++?

«Что такое интерфейсы в C++?» — вопрос из категории ООП, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В C++ интерфейс — это абстрактный класс, все методы которого являются чисто виртуальными. Он определяет контракт (набор методов), который обязаны реализовать производные классы. Это ключевой механизм для достижения полиморфизма и разделения интерфейса и реализации.

Пример интерфейса и его реализации:

// Интерфейс (абстрактный класс с чисто виртуальными методами)
class IDrawable {
public:
    virtual void Draw() const = 0; // Чисто виртуальный метод
    virtual ~IDrawable() = default; // Виртуальный деструктор обязателен
};

// Конкретный класс, реализующий интерфейс
class Circle : public IDrawable {
public:
    void Draw() const override {
        std::cout << "Drawing a circle." << std::endl;
    }
};

// Использование через указатель на базовый класс (интерфейс)
void renderShape(const IDrawable& shape) {
    shape.Draw(); // Полиморфный вызов
}

int main() {
    Circle c;
    renderShape(c); // Output: Drawing a circle.
    return 0;
}

Ключевые особенности:

  • Создать экземпляр абстрактного класса (интерфейса) нельзя.
  • Производный класс должен переопределить все чисто виртуальные методы, иначе он тоже станет абстрактным.
  • Виртуальный деструктор в базовом классе гарантирует корректное разрушение объектов производных классов через указатель на базовый.