В настоящее время я нахожусь в ситуации, когда у меня есть некоторый базовый класс и много подклассов.Подклассы должны переопределять несколько виртуальных методов, однако иногда реализация виртуального метода в одном подклассе точно идентична другому подклассу.Должен ли я просто скопировать и вставить код реализации в другой подкласс или есть способ выразить реализацию для обоих подклассов одновременно?
Код ниже демонстрирует мою проблему.
class A
{
virtual void foo1() = 0;
virtual void foo2() = 0;
};
class B : public A
{
void foo1();
void foo2();
};
class C : public A
{
void foo1();
void foo2();
};
class D : public A
{
void foo1();
void foo2();
};
void B::foo1()
{
// Same implementation of foo1 as C
}
void C::foo1()
{
// Same implementation of foo1 as B
}
void D::foo1()
{
// Different implementation of foo1
}
void B::foo2()
{
// Different implementation of foo2
}
void C::foo2()
{
// Different implementation of foo2
}
void D::foo2()
{
// Different implementation of foo2
}
Могу ли я как-то объединить реализацию для B и C?
Примечание: я явно выписал foo2, потому что в противном случае подклассы B и C были бы идентичны во всех отношениях.
Мне интересно об этом случаекогда существует много (намного больше, чем в этом игрушечном примере) подклассов, а также они наследуют множество виртуальных функций с некоторыми виртуальными функциями, имеющими одинаковую реализацию.Другими словами, ситуация, когда создание подкласса каждый раз, когда функция по совпадению имеет одну и ту же реализацию, загромождает всю структуру наследования.