我认为在这种情况下,安全地使用
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);
}
这将调用函数的空间中创建分数所以有复制结构对回报的开销。
找一位新教练。 – 2009-06-25 00:36:42
是否应该在你的例子中修改A?如果不是,你应该返回一个新的Fraction对象,它是A和B的总和。 – 2009-06-25 00:39:20