2015-10-19 41 views
1

我想開始採用最佳實踐,並且已經看到了以不同方式操作類成員。我不知道以下示例中有任何細微的差別。操縱數據成員時:以下哪一項被認爲是最佳實踐

我希望澄清一個最佳的方法,如果任何兩個或另一個建議。

const Fraction & Fraction::timesEq(const Fraction & f) { 

    //First approach 
    numerator *= f.numerator; 
    denominator *= f.denominator; 

    //Second approach 
    numerator *= f.getNumerator(); 
    denominator *= f.getDenominator(); 

    return (*this); //would 'return' statement this be considered best practice? 
} 

回答

2

我會推薦第三種方法。它將函數與分子和分母的表示隔離開來。

onst Fraction & Fraction::timesEq(const Fraction & f) { 

    this->getNumerator() *= f.getNumerator(); 
    this->getDenominator() *= f.getDenominator(); 

    return (*this); 
} 
3

第二種方法生存子類和方法可能的虛擬redifinitions如果此爲重要的特定情況下但更繁瑣和無趣。

3

在一個簡單的類中,代表諸如你的理性數字,我會遵循KISS原則並按照第一個原則行事。

如果類是更爲複雜和/或需要的(可能是虛擬的)getter/setter方法的靈活性,它可以是一個好主意,是一致的,從完全的代表性分離:

const Fraction & Fraction::timesEq(const Fraction & f) { 
    setNumerator(getNumerator() * f.getNumerator()); 
    setDenominator(getDenominator() * f.getDenominator()); 
    return *this; 
} 

無論值得添加的複雜性需要逐案確定。