Как правильно реализовать набор производных классов с различными комбинациями реализаций функций-членов без копирования кода? Классы W
, X
, Y
и Z
все являются производными от класса base
, поскольку они должны иметь возможность доступа к переменным-членам базового класса.
Я знаю способ сделать это с наследованием алмазов, но я подозреваю, что есть лучший способ.
class base {
virtual void f() { /* implementation f_0 */ }
virtual void g() { /* implementation g_0 */ }
virtual void h() { /* implementation h_0 */ }
};
class W : public base {
void g() override { /* implementation g_1 */ }
};
class X : public base {
void g() override { /* implementation g_1 */ }
void h() override { /* implementation h_1 */ }
};
class Y : public base {
void f() override { /* implementation f_1 */ }
void h() override { /* implementation h_1 */ }
};
class Z : public base {
void f() override { /* implementation f_1 */ }
void h() override { /* implementation h_2 */ }
};