На этот вопрос можно ответить таким образом, чтобы избежать специфики обсуждения конкретного примера.Класс, который наследует публично, начинается со всего, что определяет семантику его родителя - его общедоступные функции, а также его общедоступные переменные состояния, если они есть.Если ни один из них не переопределен, он соответствует принципу подстановки Лискова , и широко распространенным принципом проектирования является то, что переопределения этих свойств должны выполняться таким образом, чтобы сохранить замещаемость.
При частном наследовании это не применимо, если только программист не решит внедрить (или повторно реализовать) в производном классе все открытые свойства родительского класса таким образом, чтобы сохранить заменяемость.Поскольку в C ++ не требуется класс, производный от частного лица, для реализации версий открытых методов и переменных своего родителя, он ничем не отличается (кроме незначительных и формальных изменений в коде) от того, что производный класс вместо этого содержит экземпляр родительского класса в видечастный член.В частности, при частном наследовании производный класс ни в каком функциональном или операционном смысле не является подтипом типа родителя, и если ваш язык обрабатывает производные классы, как если бы они были подтипами, появилась возможность для недопонимания и путаницы.создан (хотя следует отметить, что если ваш язык не имеет способа обеспечить семантическую валидность подтипов (чего нет в C ++), то это фактически вопрос стиля.)