c++重载的操作员工作
c++ overloaded operator workings
所以我为具有变量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 &
不需要左值,可以使用临时变量作为值。
f1
和f2
在operator +
中不会更改,因此您可以也应该将参数声明更改为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
的副本。它是由函数返回的副本的修改版本。非成员函数几乎总是可以这样写的。
相关文章:
- <<操作员在下面的行中工作
- 复制操作员无法正常工作
- 默认操作员如何在C 中工作
- 有人可以解释C 操作员=此处的工作方式
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- 如何与朋友操作员一起在链表下面工作
- C 如果与我期望的语句或操作员无法正常工作
- && 和 ||操作员未按预期工作
- 在抽象类中删除操作员,它如何工作
- C 操作员超载无法正常工作
- 为什么被删除=操作员,我该如何工作
- CPP:超载的嵌套操作员无法正常工作
- 成员操作员不工作
- (C 14)操作员&lt;&lt;超负荷无法正如智能指针向量所预期的那样工作
- 我的操作员=和复制构造函数在我的班级中无法正常工作
- 操作员移动装载的工作原理
- 超载*操作员只能与一个施工人员一起工作
- 操作员过载无法正常工作
- 如何使操作员从对象的左侧工作
- 或操作员不工作