2015-08-29 55 views
1

重用重載如果我有setter函數重載在其他重載

void setDamageRange(const Range& r); 
void setDamageRange(int min, int max); 

,我能夠使用重載之一,在其他

void Weapon::setDamageRange(const Range& r) 
{ 
    setDamageRange(r.min, r.max); 
} 

void Weapon::setDamageRange(int min, int max) 
{ 
    mDamageRange.min = min; 
    mDamageRange.max = max; 
} 

我應該怎麼辦呢?或者我應該再次進行所有有效性檢查和分配

void Weapon::setDamageRange(const Range& r) 
{ 
    mDamageRange = r; 
} 

void Weapon::setDamageRange(int min, int max) 
{ 
    mDamageRange.min = min; 
    mDamageRange.max = max; 
} 

我的直覺告訴我,我應該選擇第一個替代方案來重用代碼,因爲這通常是很好的做法。但與此同時,它感覺就像是讓它變得混亂,特別是如果我要提供更多的功能重載,因爲它們中只有一個是「控制」功能。

就像我認爲我並不真的需要「控制」功能並將其刪除,我必須重寫所有其他過載的代碼。

+0

我更喜歡第一個。沒有冗餘和改進的可讀性:) 這是基於意見,兩種方法都沒有錯。 – CinCout

+0

在第二個重載中還有第三個重用第一個重載的選項:'setDamageRange(Range(min,max));'並且你不必在'Range :: operator ='中重複代碼。 – LogicStuff

回答

3

我應該[從另一個調用一個超負荷]?

絕對!這是重用代碼的絕佳方式。

或者我應該做的所有的有效性檢查,並再次分配

一般情況下,這將違背Don't Repeat Yourself原則,因爲同樣的驗證,如果有的話,就必須進入這兩個位置。