我认为在这种情况下使用是安全的
return *this
因为this
引用当前对象所以保证存在,所以不会为空。
返回对自身的引用的原因plus
是它可以被链接:
Fraction C = A.plus(B).plus(D) // perhaps?
请注意,在上述情况下,将通过复制加法结果来创建 C。这也假设操作plus
是为了修改对象(在本例中为 A)并返回对该修改对象的引用。
不会加上接受引用而不是复制参数吗?
Fraction& plus( const Fraction& frac )
这类似于您将如何实现operator=
(示例):
A& operator=(const A& right) {
if(this == &right) return *this; // Handle self-assignment
b = right.b;
return *this;
}
也许您不想修改对象并返回新对象:
// assuming there's a constructor Fraction(int numerator, int denominator):
Fraction* plus(Fraction const& rhs)
{
return new Fraction(numerator * rhs.denominator
+ rhs.numerator * denominator,
denominator * rhs.denominator);
}
但这当然必须返回指向新实例的指针,这不是您的任务中可能需要的引用(?)。
甚至更好:
Fraction plus(Fraction const& rhs)
{
return Fraction(numerator * rhs.denominator
+ rhs.numerator * denominator,
denominator * rhs.denominator);
}
这将在调用函数的空间中创建 Fraction,因此没有在返回时复制结构的开销。