Эмпирическое правило гласит: «Используйте самое слабое отношение, какое только можете».Взгляните на: http://www.gotw.ca/publications/mill06.htm и http://www.gotw.ca/publications/mill07.htm
. Вы можете использовать частное наследование для моделирования "реализуется в срок", но вам следует подумать об исключительной безопасной импликации http://www.gotw.ca/gotw/060.htm
Я знаю, я люблю гуру недели.; -)
РЕДАКТИРОВАТЬ
Я использую этот вид базовых классов для предоставления объектам со свойствами с предопределенной не виртуальной функциональностью
Почему агрегация лучше наследования:
1) Вы можете скрыть методы (или изменить имена) с наследованием, все методы доступны по умолчанию.
2) Вы можете использовать классс не-виртуальным деструктором (std :: string и все контейнеры stl).
3) Вы можете легко изменить реализацию, если вы хотите изменить базовый объект, ваш интерфейс останется нетронутым, однако, если вы наследуете от другогобазовый класс, в котором может измениться ваш интерфейс.
4) Безопасное исключение (см. третью ссылку).
5) Легко читаемое.
Когда необходимо «частное наследование»:
1) Когда класс, который вы хотите использовать, является абстрактным (вы не можете использовать агрегацию).
2) Когда вы хотите использовать защищенные методы.
Когда "publicнаследование "необходимо:
1) Когда вы хотитедля доступа к закрытым методам и данным (вы не должны этого делать).
В конце концов, агрегация позволяет вам лучше контролировать свой интерфейс.Я обычно предпочитаю этот вариант.Частное наследование иногда является единственным вариантом, однако стоимость является более жестким интерфейсом, а также последствиями для безопасности исключений.Я стараюсь по возможности избегать использования частного наследования.
Я никогда не использовал публичное наследование для моделирования "has-a".