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

When manipulating data members: which of the following is considered best practice

本文关键字:认为是 最佳 哪一种 数据成员 操作      更新时间:2023-10-16

我想开始采用最佳实践,并且已经看到类成员以不同的方式被操纵。在下面的例子中,我不知道有什么细微或显著的区别。

我希望澄清一个最佳的方法,如果这两个或另一个建议中的任何一个。

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

第二种方法保留了子类和方法的可能的虚拟重新定义,如果这对特殊情况很重要,但更麻烦和无聊。

在表示有理数的简单类中,如您的类,我将遵循KISS原则并使用前者。

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

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

是否值得增加复杂性需要逐个决定。

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

onst Fraction & Fraction::timesEq(const Fraction & f) {
  this->getNumerator() *= f.getNumerator();
  this->getDenominator() *= f.getDenominator();
  return (*this);
}