Здесь вы говорите только о повторном использовании кода. Я думаю, это потому, что вам действительно не нужен и не нужен настоящий полиморфизм. Если это действительно так, то рассмотрите частное наследование и using
, чтобы раскрыть родительские методы.
Например:
class Class1Class2 : Class1, Class2 {
public:
using Class1::Method1;
// ...
using Class2::Method6;
// ...
};
Частное наследование, хотя технически называется наследованием, очень отличается от наследования publi c, которое само по себе концептуально отличается от подтипов.
В C ++ (и многих других языках, поддерживающих OOP), publi c наследование обычно обеспечивает как подтипирование, так и повторное использование кода . Однако вполне возможно создать класс с некорректным поведением там, где ожидается родительский класс. Это потенциально подрывает выделение подтипов. Также вполне возможно создать класс, который не использует повторно какую-либо реализацию родительского класса. Это потенциально подрывает повторное использование кода.
Концептуально создание подтипов выражается наследованием интерфейса, в то время как наследование реализации - это только один из способов повторного использования кода. Выражение «композиция вместо наследования», насколько я понимаю, касается использования других инструментов для повторного использования кода, потому что наследование реализации часто приводит к плохому коду. Однако на самом деле нет другого способа достичь истинного подтипирования, кроме наследования, поэтому он все еще может быть полезен там 1 .
С другой стороны, частное наследование - это просто странная форма сочинение. Он просто заменяет член частным базовым классом. Преимуществом этого является возможность использовать using
, чтобы легко раскрыть части этого «члена», которые вы хотите раскрыть.
1 Мне лично не нравится ни то, ни другое формы (publi c) наследования, предпочитая статический c полиморфизм и утиную типизацию во время компиляции. Однако я могу с удовольствием работать с наследованием интерфейсов, тогда как обычно я держусь подальше от наследования реализации.