2010-10-21 59 views
0

我有一個類顯示2個實用功能getDate和getTime如下。實用程序功能如何在各個類中共享?

class Display 
{ 
public: 
    void getDate(char *pDate); //Utility functions for converting to custom format 
    void getTime(char *pTime); 
}; 

後來,在另一個叫做Retriever的類中,我也需要相同的Utility函數getDate和getTime。我不想讓getDategetTime函數爲全局函數(或類似C函數),以避免意外地使用這些函數(這些函數特定於這兩個類)。即使將它們包裝在名稱空間中也不會防止意外使用。

顯示和檢索器是不相似的類。不能在它們之間使用繼承。不能使用組合和聚合,因爲這些類的對象的生命週期將不同。它們不在一起(同時)。

有沒有什麼好的方法可以將Display Utility中的Utility函數移出來並在Display和Retriever中使用它們? 將getDate和getTime放置在名爲Utilities的獨立類中並在類Display和Retriever中使用它的對象是否好?

+0

你爲什麼如此擔心意外使用? – 2010-10-21 07:19:41

+0

@PigBen:因爲這些函數寫入傳遞的字符指針。緩衝區溢出不被照顧。不正確的輸入可能會導致崩潰。 – bjskishore123 2010-10-21 07:31:30

+0

例如, 'getDate'完全依賴於它被調用的'Display'或'Retriever'實例中的數據?如果是這樣,什麼?顯示實施可能會有所幫助。 – 2010-10-21 07:37:41

回答

1

我認爲使用名稱空間將是最合適的。您可以爲命名空間選擇的名稱,這樣每個人都知道它的目的:

namespace DisplayRetrieverImplementation { 
    void getDate(char *pDate); //Utility functions for converting to custom format 
    void getTime(char *pTime); 
} 
2

基於在評論/討論中,例如,您的其他信息getDate不依賴實例數據,getDategetTime不應該是非靜態成員函數。理想情況下,他們應該是獨立的功能。也許在一個命名空間中。

把它們和其他相關的東西放在它自己的模塊中。

它可以是純粹的headerfile模塊,也可以是由頭文件和實現文件組成的單獨編譯模塊。

將函數放入名稱空間,如timeutil,或者一個庫的名字,不管。

我建議將它們改爲返回std::string而不是採用原始指針參數,例如

#include <string> 

namespace timeutil { 
    std::string timeString(); 
    std::string dateString(); 
} 

乾杯&心連心,

0

你可以讓你的功能的另一個類的私有靜態成員。讓這個類的顯示和檢索器成爲朋友。