Назад к вопросам
Middle
97
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

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

  • Содержит чисто виртуальные функции: Функция объявлена как чисто виртуальная при помощи = 0; после объявления. Производный класс обязан переопределить все чисто виртуальные функции, чтобы стать конкретным классом (который можно инстанцировать).
  • Абстрактный класс: Интерфейсный класс является частным случаем абстрактного класса.
  • Нет реализации методов: Обычно интерфейсный класс не содержит реализации для виртуальных функций. В редких случаях может быть реализация для невиртуальных функций или виртуальных функций (если нужны какие-то общие функциональные возможности, но тогда он уже не "чисто" интерфейсный).
  • Используется для полиморфизма: Позволяет работать с объектами разных производных классов через указатель или ссылку на базовый интерфейсный класс.
  • Построение контрактов: Определяет "что должен делать" класс, не указывая "как".

Пример:

// Интерфейсный класс
class IDrawable {
public:
    // Чисто виртуальная функция
    virtual void draw() const = 0;

    // Виртуальный деструктор важен для корректного удаления
    // объектов производных классов через указатель на базовый
    virtual ~IDrawable() = default;
};

// Производный класс, реализующий интерфейс
class Circle : public IDrawable {
public:
    void draw() const override {
        // Реализация отрисовки круга
        // ...
    }
};

// Производный класс, реализующий интерфейс
class Square : public IDrawable {
public:
    void draw() const override {
        // Реализация отрисовки квадрата
        // ...
    }
};

void render(const IDrawable& obj) {
    obj.draw(); // Полиморфный вызов
}