2011-10-25 74 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