操作数据成员时:以下哪项被认为是最佳实践

时间:2015-10-19 06:46:33

标签: c++ class object c++11 data-members

我想开始采用最佳实践,并且已经看到班级成员以不同的方式被操纵。我不知道以下示例中存在任何细微差别。

如果有任何两种或另一种建议,我希望澄清一种最佳方法。

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

在一个代表你的理性数字的简单类中,我会遵循KISS原则并与第一个一起去。

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

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

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

答案 2 :(得分:2)

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

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

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

  return (*this);
}