Мне нравится эта концепция наследования:
Обычно считается способом «повторного использования существующего кода» путем создания нового класса, который наследуется от другого существующего класса. Таким образом, вы можете расширить функциональность существующего класса без касания кода существующего класса. Но у Херба Саттера есть несколько иной подход к использованию наследования: «Унаследовать, не использовать повторно, но использовать повторно. Не наследовать публично для повторного использования кода (который существует в базовом классе); наследовать публично для того, чтобы для повторного использования (существующим кодом, который уже полиморфно использует базовые объекты). " [C ++ Стандарты кодирования, с. 64]. Он также говорит: «В правильном наследовании производный класс моделирует особый случай более общей базовой концепции». [Там же, с. 66]
http://cpp.strombergers.com/
так что, если вам не нужно повторно использовать код полиморфно или сделать более особый случай для базы, лучше используйте композицию.