2012-09-23 84 views
0

我想知道用C++中的多個純虛擬方法創建抽象類是好還是不好?C++中的大型抽象類是好還是不好?

例如像執行會話發起協議的對話框某些情況下,我們發現,它可以使用橋接模式來實現。但是對於常見操作而言,抽象基類會導致產生一個非常大的抽象類。現在從性能角度看,使用和實現這樣的類有什麼作用?

考慮我們每一位有它自己的實現不同的對話框。 (例如:InviteDialog,RegisterDialog,InfoDialog,...)

應用橋接模式:忽略執行

class IIDialog{ 
public: 
/*there are multiple pure virtual methodes at least 15*/ 
virtual int32_t SendResponse(ISipMessage* response) = 0; 
protected: 
/*there are multiple methods that use pure virtual methods*/ 
int32_t Send_Response(){retun SendResponse(response);} 
} 

class IInviteDialog : public IIDialog 
{ 
/*Implemet virtual methods*/ 
} 

class IRegisterationDialog : public IIDialog 
{ 
/*implement virtual methode*/ 
} 

其他部分(即使用上述類實現真正的實現和摘要)

由於

+0

有一大類從設計的角度來看,更往往不是壞的,無論是抽象的或沒有。 – juanchopanza

+0

,如果你強調這個開銷,你可能會發現一個24/7服務器*可能會在一個月內爲你節省大約2-3秒的CPU時間。我可以有把握地說,如果你有一個大的虛擬桌面佈局,你需要更加重要的事情來節省那幾秒鐘,比如爲什麼你最初有這麼大的虛擬桌面。 – WhozCraig

+0

在設計的開始,我選擇使用繼承來實現這些類。但是我發現使用繼承可以使類的客戶端具有類型轉換。當使用派生類時,阻止類的客戶端從類型轉換,我決定應用橋接模式。在橋樑模式中,我們需要確定共同性和變異性。通過這樣做,我發現了很多共同性操作。我必須在基於Gof書的抽象類中有共同的操作。 我想知道你的建議是什麼? –

回答

1

擁有最現代化的C++編譯器,你可以假設的性能開銷時,構造一個對象不依賴於虛擬方法的數量。

而實際上調用方法時,我預計不會比任何替代實現方法的較大的開銷。

如果這些函數調用不喜歡網行動「複雜」的事情,那麼你並不真的需要無論如何理會這種微型的優化,這將是完全不相干的。

+0

非常感謝你 –

0

從性能來看,虛擬方法的數目不使用C++無關緊要(有一個很小的常數的代價爲I ndirection,不管方法數量多少)。

+0

感謝您的快速回復。 –

相關問題