У меня есть базовый класс, от которого наследуются подклассы, он содержит базовые функции, которые должны быть одинаковыми для всех производных классов:
class Basic {
public:
Run() {
int input = something->getsomething();
switch(input)
{
/* Basic functionality */
case 1:
doA();
break;
case 2:
doB();
break;
case 5:
Foo();
break;
}
}
};
Теперь, основываясь на производном классе, я хочу «добавить» больше операторов case в коммутатор. Какие у меня есть варианты? Я могу объявлять виртуальные функции и определять их только в производных классах, которые будут их использовать:
class Basic {
protected:
virtual void DoSomethingElse();
public:
Run() {
int input = something->getsomething();
switch(input)
{
/* Basic functionality */
...
case 6:
DoSomethingElse();
}
}
};
class Derived : public Basic {
protected:
void DoSomethingElse() { ... }
}
Но это будет означать, что при изменении функций в любом производном классе мне придется отредактировать базовый класс, чтобы отразить эти изменения.
Есть ли шаблон проектирования специально для такого рода проблем? Я купил несколько книг по шаблонам проектирования, но изучаю их по мере необходимости, поэтому понятия не имею, есть ли такой шаблон, который я ищу.