За исключением того, что вы, похоже, предлагаете использовать множественное наследование.
Наследование имеет различное использование. Открытое наследование определяет отношение IS-A, а наследование с любыми модификаторами доступа может обеспечить поведение дочернего класса, которое затем может быть переопределено. В C # и Java (с которыми я более знаком) интерфейсы предоставляют интерфейс IS-A без поведения. (В C ++ вы можете создать интерфейс, определив класс без членов данных и все функции чисто виртуальные.)
Итак, если вы предоставляете интерфейс и помещаете переменную-член для обеспечения поведения, вы делаете полное наследование в стиле C ++. Вы просто разбиваете его на компоненты и делаете больше хлопот, чтобы это сделать. Описывать это как решение проблемы множественного наследования является неискренним, поскольку выполнение этого с двумя интерфейсами и двумя переменными-членами является множественным наследованием. Это становится еще более неловким, если вы собираетесь изменить поведение полиморфным способом, поскольку вам нужны параллельные иерархии наследования или более сложная диспетчеризация переменной-члена.
Есть проблемы с множественным наследованием в C ++, правда, но есть и применения, которые не представляют проблем. Первое хорошее применение, которое я увидел, это «смешанные модули»: маленькие классы для добавления определенного поведения. В Java имеется множество интерфейсов для этого, но вы должны сами справиться с этим.
Если вам интересно узнать больше о множественном наследовании, я бы предложил попробовать язык, такой как Common Lisp, где обычно используется множественное наследование, и ни у кого нет проблем с ним.