2015-10-19 35 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; 
} 

无论值得添加的复杂性需要逐案确定。