В ситуации наследования вы можете рассматривать производный класс как его базовый класс.Таким образом, вы можете хранить коллекцию ссылок на базовый класс и вызывать их методы без необходимости знать, имеют ли фактические объекты какой-либо производный тип, и если да, то какой.Это важная семантическая концепция.
В случае класса-члена внутренний класс является просто деталью реализации внешнего класса и даже невидим для потребителя.Даже если бы это было видно, это была бы только особенность класса foo
.Вы можете видеть, что эти две ситуации семантически сильно различаются, и вам нужно выбрать ту, которая наиболее точно представляет вашу фактическую модель данных.
Технически , производный класс, вероятно, весит совсем немноготяжелее из-за различных вызовов виртуальных функций, но детали зависят от вашего языка и конкретной ситуации.