2014-09-25 40 views
2

我正在C++中製作一個日曆應用程序,並且我根據提供的信息爲約會類製作了大量的重載構造函數(例如,如果我有事件的開始時間但沒有結束時間,並且位置,但沒有連接的接點)有大量的重載類構造函數被認爲是不好的編程習慣嗎?

class Appointment { 
    public: 
    //overloaded Constructors 
    Appointment(); 
    Appointment(Date); 
    Appointment(Date,Date); 
    Appointment(Date,Date,std::string); 
    Appointment(Date,Date,std::string,std::string); 
    Appointment(Date,Date,std::string,std::string,Contact); 

等等等有沒有更好的方法來做到這一點?

+0

那麼通過getter/setters創建一個對象並設置它的屬性呢? (或默認的,如果你支持它們) – 2014-09-25 22:25:14

+3

這真的取決於這些構造函數的作用。例如,如果你做同樣的工作,你可以使用一個帶默認參數的簡單構造函數,並避免代碼膨脹。 – 101010 2014-09-25 22:25:54

+0

我不知道默認參數,這應該適合我想要做的事情,謝謝! – austinphilp 2014-09-25 22:32:28

回答

3

你既可以:

  • 創建對象(有效的),並通過接口setter方法後設置其屬性(因爲它似乎是一個對象可以有可變數量的屬性,這似乎是一個不錯的選擇)

  • 使用默認參數,例如

    Appointment(Date=getDefaultDate(), 
          Date=getDefaultDate(), 
          std::string=getDefaultString(), 
          std::string=getDefaultString(), 
          Contact=getDefaultContact()); 
    

這真的歸結爲你喜歡如何處理和初始化對象。

一個重要的旁註:在大型的生產代碼庫的默認參數是++的功能往往在,因爲它可能會妨礙可讀性和/或使調試特別的場景(更困難,特別是當一些不想要的那張眉頭皺了C和你沒有考慮選擇默認參數,默認參數are specified on the declaration,這也可能「隱藏」來自開發者的潛在問題)

+0

默認參數的缺點+1。我以前沒有真正想到過。 – anthropomorphic 2014-09-26 03:38:58

+0

@anthropomorphic我不得不努力學習它:( – 2014-09-26 06:56:12

+1

非常感謝你,我認爲根據你的建議,我會找到一種方法來用最少的默認構造函數來完成它,非常感謝! – austinphilp 2014-09-26 22:58:33

0

這是完全不必要的。正如宏指出的那樣,你可以默認構造對象,然後你可以爲它們使用setter。

設計軟件時,還應該記住完整和最少的規則,即應該提供一個班級的所有設施以避免重複/冗餘。

+1

請將我的名字提升爲模板至少,不是宏:'( – 2014-09-26 22:59:46

相關問題