2011-10-25 73 views
3

在当前项目中的细微差别抽象类,我班命名为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); 
    } 
} 

是他们无论如何使抽象类定义的功能doSomethingdoOtherthing只一次,并使班级经理和控制器执行它?

我想这样做强制管理器和控制器之间的函数名称/参数的相似性。

+1

是否有一个特别的原因,你为什么需要包装'BlahController'方法,而不是像'BlahController&GetController(size_t blahIndex)'(甚至是'operator []''如果合适的话)暴露控制器? –

回答

2

不,你不应该。

BlahController::doSomething需要两个参数,而BlahManager::doSomething需要3所以你不能有一个抽象父类迫使两个类来实现同样的功能,因为他们不同样的功能。

此外,你甚至不应该这样做。这些功能不会做类似的工作。例如,如果你的drawclass Circleclass Triangle,他们正在做类似的工作。但是,在这里,一个人正在执行一项工作,而另一个正在管理它。所以,即使函数签名是相似的,我也绝不会让它们从一个普通的父类继承它!

+1

如果有人正在编写这些函数,并且您想强制他们编写兼容的签名,只需在代码或单独的文件中放一个便条,然后告诉他们这样做。你不应该把程序员当成一个白痴。 (也就是说,如果他是一个白痴,就射他) – Shahbaz

+0

我喜欢射击的想法,不好的部分是你不能射击顾客:D – Yousf

+0

啊可爱的顾客。我总是说:“当你购买汽车时,你不会告诉公司如何制作它的每一个细节,你只要去选择你喜欢的东西,如果你购买软件,你不能告诉我写出来,你要么喜欢它,要么买走,要么离开“(嗯,我在大学工作,所以我没有直接的客户,我很确定在生意上,虽然这句话可以让你破产没有时间!:D我们一直对待客户,他们认为他们可以说任何事情) – Shahbaz