Защищенное наследование

Почему защищенное и частное наследование определено и предлагается? Я понимаю, что в некоторых случаях можно использовать частное наследование, но это не рекомендуется. Как насчет защищенного наследования?

Может ли кто-нибудь предложить мне ситуацию, в которой защищенное наследование является выбором?

Я редко вижу это.

Большое спасибо!

Ответ 1

Частное наследование обычно используется для mixins --- где люди наследуют, чтобы получить функциональность из базового класса, а не из-за наследования "is-a".

Защищенное наследование также может использоваться для микшинов, где смешанные функции также доступны для классов вниз.

Ответ 2

Обычно я не использую наследование protected. На самом деле, я обычно не использую наследование private. Если что-то не удовлетворяет Принципу замещения Лискова, то я не вижу причины использовать наследование любого рода; и если он удовлетворяет LSP, вы используете наследование public.

Однако язык различает private и protected только с точки зрения класса (то есть код, использующий класс, не может отличить).

Вы должны использовать наследование protected, если хотите семантику, и вы должны использовать private, когда вы не хотите protected.

Ответ 4

Это ситуация, в которой я бы использовал Protected inheritance

Base → Derived1 → Derived2

  • Я не хочу, чтобы Derived1 был заменен базовым классом
  • Я хочу использовать функциональность в базе, а также позволить Derived2 использовать ее без раскрытия функциональность для классов клиента