Я думаю, что в этом случае безопасно использовать
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 в пространстве вызывающей функции, так что нет никаких затрат на копирование структуры при возврате.