c++重载的操作员工作



所以我为具有变量num和den的fraction类编写了这个重载函数。

fraction  operator +(fraction & f1, fraction & f2)
{
fraction temp;
temp.num = (f1.num  * f2.den ) + ( f1.den  * f2.num  );
temp.den = (f1.den  * f2.den );
return temp;
}

如果我使用这个代码作为f1 = f1+f2,它运行得很好。但我想把它用作f1 = f2+fraction(3,4)如果我尝试以这种方式使用它,它会向fraction和fraction显示无效的操作数。有人能识别出这种错误以及为什么会发生这种错误吗。提前谢谢。

类型fraction&需要传递的参数必须是左值(地址为你可以采取)类型的fraction。但fraction(3,4)是一个临时对象,而不是左值,因此不能通过引用传递。

const fraction &不需要左值,可以使用临时变量作为值。

f1f2operator +中不会更改,因此您可以也应该将参数声明更改为const &,这允许通过引用传递临时对象。

fraction operator +(const fraction & f1, const fraction & f2)

我通常会根据+=编写一个+运算符。例如:

// member function 
fraction &fraction::operator +=(const fraction &f2)
{
    num = num * f2.den + den * f2.num;
    den *= f2.den;
}
// non-member function
inline fraction operator+(fraction lhs, const fraction& rhs)
{
    lhs += rhs;
    return lhs;
}

注意,在第二个函数中,lhs不是引用,而是传递的fraction的副本。它是由函数返回的副本的修改版本。非成员函数几乎总是可以这样写的。

最新更新