我認爲在這種情況下,安全地使用
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