以下是包含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
的成员,而不是临时对象。返回时,您返回对此的引用。