Защищенное наследование
Почему защищенное и частное наследование определено и предлагается? Я понимаю, что в некоторых случаях можно использовать частное наследование, но это не рекомендуется. Как насчет защищенного наследования?
Может ли кто-нибудь предложить мне ситуацию, в которой защищенное наследование является выбором?
Я редко вижу это.
Большое спасибо!
Ответы
Ответ 1
Частное наследование обычно используется для mixins --- где люди наследуют, чтобы получить функциональность из базового класса, а не из-за наследования "is-a".
Защищенное наследование также может использоваться для микшинов, где смешанные функции также доступны для классов вниз.
Ответ 2
Обычно я не использую наследование protected
. На самом деле, я обычно не использую наследование private
. Если что-то не удовлетворяет Принципу замещения Лискова, то я не вижу причины использовать наследование любого рода; и если он удовлетворяет LSP, вы используете наследование public
.
Однако язык различает private
и protected
только с точки зрения класса (то есть код, использующий класс, не может отличить).
Вы должны использовать наследование protected
, если хотите семантику, и вы должны использовать private
, когда вы не хотите protected
.
Ответ 3
См. Herb Sutter Использование и злоупотребления наследования, часть 1, которая также находится в его Более исключительная книга С++.
Ответ 4
Это ситуация, в которой я бы использовал Protected inheritance
Base → Derived1 → Derived2
- Я не хочу, чтобы Derived1 был заменен базовым классом
- Я хочу использовать функциональность в базе, а также позволить Derived2 использовать ее без раскрытия
функциональность для классов клиента