Почему защищенное и частное наследование определено и предложено? Я понимаю некоторые случаи, частное наследование могло использоваться, но оно не рекомендуется. Как насчет защищенного наследования?
Кто-либо может предложить мне ситуацию, в которой защищенное наследование является выбором?
Я редко вижу это.
Большое спасибо!
Частное наследование обычно используется для смешин, - где люди наследуют, чтобы получить функциональность от базового класса, а не из-за «IS-A» наследство.
Защищенное наследование также может быть использовано для смешин, где смешанные функциональные возможности также должны быть доступны для пониженных классов.
См. Использование Herb Sutter и злоупотребления наследования, часть 1 , которое также в его более исключительно C ++ книга.
Это ситуация, которую я бы использовал охраняемую наследование
базы -> Dervive1 -> Dervive2
Я обычно не использую защищенное
наследование. На самом деле, я обычно не использую частное
наследование. Если что-то не удовлетворяет принципу замещения Лискова, то я не вижу причин использовать какое-либо наследство; а если оно удовлетворяет LSP, то вы используете public
наследование.
Однако, язык различает между private
и protected
только с точки зрения класса (то есть код, использующий класс, не может отличить).
Вы должны использовать защищенное
наследование, когда вы хотите, чтобы это была семантика , и вы должны использовать частное
, когда вы не хотите, чтобы защищенное
.