以下是包含operator+方法的类。我理解它的feetInches::operator+(const feetInches &other) const部分,但是在方法定义中,为什么会有一个额外的feetInches,它在这里代表什么?

   class feetInches {
      public:
         feetInches(int inFeet = 0, int inInches = 0);
         feetInches operator+(const feetInches &other) const;
         void print() const;
      private:
         int feet;
         int inches;
   };

   feetInches feetInches::operator+(const feetInches &other) const
   {
      feetInches temp;
      temp.feet = feet + other.feet;
      temp.inches = inches + other.inches;
      return temp;
   }

最佳答案

声明一个函数const意味着您不能修改该对象(除非您当然尝试修改mutable字段,但这是另一回事)。因此,要返回两个feetInches的和,必须创建一个新的feetInches对象并返回该对象。

// return type     scope resolution             parameter type
//      |                 |                           |
//      |                 |                           |
    feetInches        feetInches::operator+(const feetInches &other) const
    {
//      return value - you can't modify this (because method is const), so you must create
//           |       a third object
        feetInches temp;
        temp.feet = feet + other.feet;
        temp.inches = inches + other.inches;
        return temp;
    }


编辑:

作为比较,考虑重载运算符+=

 feetInches& feetInches::operator+=(const feetInches &other)
 {
    feet = feet + other.feet;
    inches = inches + other.inches;
    return *this;
 }


因为在这种情况下this对象已更改,所以运算符不再是常量。您还可以操作this的成员,而不是临时对象。返回时,您返回对此的引用。

09-10 04:02