2016-09-21 333 views
1

這個問題是關於OOP設計的。 將所有參數傳遞給類構造函數vs將參數傳遞給成員函數有什麼優點/缺點?將所有參數傳遞給類構造函數並將參數傳遞給成員函數

就我而言,我知道程序開始時的所有參數,在程序結束前我不需要改變它們。

在C++中的情況是類似的東西(雖然我的代碼需要分析更多的參數和成員函數都比較複雜):

// All arguments in class constructor 
Rectangle::Rectangle(float base, float height, string rectColor){ 
    this->area = 0; 
    this->base = base; 
    this->height = height; 
    this->rectColor = rectColor; 
} 

void Rectangle::calcArea(){ 
    area = base * height; 
} 

void Rectangle::paintRectangle(){ 
    // use area 
    // whatever 
} 

VS

// Arguments in member functions 
Rectangle::Rectancle(){ 
    this->area = 0; 
} 

void Rectangle::calcArea(float base, float height){ 
    area = base * height; 
} 

void Rectangle::paintRectangle(string rectColor){ 
    // use area 
    // whatever 
} 

一種策略我使用的是:如果我需要多個成員函數中的變量,我把它變成一個類變量。這是好還是最好的方法?

將所有內容傳遞給構造函數的一個壞處是它會有很多參數。而且我也不需要在我的main中調用類成員函數。

請解釋我應遵循的主要原則。

+0

老實說,第二個提議並不壞,但這不再是喲。 –

回答

0

收益爲把參數的構造函數:

  • 的實例更完全初始化(函數的順序沒有問題,被稱爲獲得「complete'useful實例

。將參數置於特定功能的好處:

  • 更靈活,因爲函數使用變量而不是'常量'傳遞給con結構體
  • 傳遞給函數的參數往往屬於更好的函數(例如,對於paintRectangle是合乎邏輯的通過顏色,但如果它永遠不會改變,所以使得靈活性事後更改顏色?)

爲了防止過多的爭論在cnstructor

  • 創建結構通過變量
  • 創建一個子類......如果您需要超過5-7個參數,則該類的責任可能太大。
  • 使用命名的參數(更清晰,但還是參數的相同金額)

在一般情況下,使類儘可能限制,不要讓他們更靈活的比需要的,除非你事先知道需要的功能在稍後階段。

0

關於構造函數最重要的事情之一是它們使你的OOP代碼一致。對於任何對象,如果您已經知道,使用屬性創建的某個人必須存在纔是好方法。

即即使沒有「高度」,矩形也不能存在。

因此「最小參數構造函數」具有很大的優勢。 (當計算區域時,最小需要的參數需要用於對象,可用並且不能崩潰)

如果您有更多的參數,它們不是必須的,最好創建更多基於構造函數的參數關於可能「經常使用」你的對象的東西。