【问题标题】:When manipulating data members: which of the following is considered best practice操作数据成员时:以下哪一项被认为是最佳实践
【发布时间】:2015-10-19 06:46:33
【问题描述】:

我想开始采用最佳实践,并看到班员以不同的方式受到操纵。我不知道以下示例中有任何细微或显着差异。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-07-20
          • 1970-01-01
          • 2012-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-08
          • 1970-01-01
          相关资源
          最近更新 更多