Hardмножественное наследование

Чем множественное наследование полезно и какие опасности?

1Постановка

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

2Решение

Множественное наследование (MI) — класс наследует несколько баз. Полезно для mixin’ов, интерфейсов, CRTP. Опасности: diamond problem, коллизии имён, сложность инициализации, overhead виртуального наследования.

// Безопасное MI: «чистые интерфейсы» без данных
class IComparable { public: virtual int cmp(const IComparable&) = 0; };
class ISerializable { public: virtual void save() const = 0; };
class Product : public IComparable, public ISerializable {
    int cmp(const IComparable&) override { /* ... */ return 0; }
    void save() const override { /* ... */ }
};
  • Diamond problem — решается virtual inheritance, но сложно;
  • Коллизии имён — две базы с методом foo, нужно явно Base::foo;
  • Идиома «interface classes» (только pure virtual, без данных) — относительно безопасное MI.

Реальное MI с реализацией — редкость в современном коде, заменяется на композицию и policy-based design.

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

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

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