Mediumнаследование

Чем public, private и protected наследование отличаются?

1Постановка

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

2Решение

Тип наследования определяет, как члены базы видны в производном и его клиентах.

class Base { public: void f(); };

// public: интерфейс базы доступен — D ЯВЛЯЕТСЯ Base (is-a)
class D1 : public Base {};
D1 d; d.f();   // OK

// protected: интерфейс базы виден только наследникам
class D2 : protected Base {};
// D2 d; d.f();   // ошибка

// private: все члены базы private в производном (has-a через inheritance)
class D3 : private Base {};
  • public — производный ЯВЛЯЕТСЯ базой, конвертируется в базу (для полиморфизма);
  • private/protected — база «спрятана», реализация через inheritance (для mixin’ов);
  • По умолчанию для class — private, для struct — public.

В новом коде — public для полиморфизма, private как composition-replacement.

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

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

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