Абстрактный класс с небольшими отличиями в реализаторах - PullRequest
3 голосов
/ 25 октября 2011

В текущем проекте у меня есть классы с именем BlahManager и класс с именем BlahController, определенные следующим образом:

class BlahController
{
public:

   void doSomething(int x, float y){
        // do the work
   }
   void doOtherThing(char a, char* b, int c){
        // do the work
    }
}

class BlahManager
{
public:
   BlahController m_controllers[5];

   void doSomething(int blahIndex, int x, float y){
       m_controllers[blahIndex].doSomething(x,y);
   }
   void doOtherThing(int blahIndex, char a, char* b, int c){
       m_controllers[blahIndex].doOtherThing(a,b,c);
    }
}

В любом случае они являются абстрактным классом, который определяет функции doSomething и doOtherthing только один раз, и заставить и диспетчер классов, и контроллер реализовать его?

Я хочу сделать это, чтобы вызвать сходство имен / параметров функций между диспетчером и контроллером.

1 Ответ

2 голосов
/ 25 октября 2011

Нет, и вы не должны.

BlahController::doSomething принимает 2 параметра, а BlahManager::doSomething принимает 3. Таким образом, вы не можете иметь абстрактный родительский класс, заставляющий два класса реализовывать одну и ту же функцию, потому что они не одна и та же функция.

Кроме того, вы даже не должны этого делать.Эти функции не выполняют схожую работу.Например, если у вас есть draw для class Circle и class Triangle, они выполняют аналогичную работу.Но здесь один выполняет работу, а другой управляет ею.Таким образом, даже если сигнатуры функций похожи, я бы никогда не заставил их наследовать их от общего родителя!

...