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?
}
4

3 回答 3

3

第二种方法在子类化和方法的可能虚拟重新定义中幸存下来,如果这对特定情况很重要,但更麻烦和无聊。

于 2015-10-19T06:49:39.027 回答
3

在像你这样表示有理数的简单类中,我会遵循 KISS 原则并采用第一个。

如果类更复杂和/或您需要(可能是虚拟的)getter/setter 的灵活性,那么保持一致并与表示完全解耦可能是个好主意:

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

这是否值得增加复杂性需要根据具体情况来决定。

于 2015-10-19T08:10:48.753 回答
2

我会推荐第三种方法。它将函数与分子和分母的表示隔离开来。

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

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

  return (*this);
}
于 2015-10-19T06:48:06.697 回答