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