I 이 존재하는 보장되도록 this
현재 객체를 참조하기 때문에
return *this
를 사용하는 것이 안전합니다,이 경우 생각, 그래서 null이되지 않습니다 . 상기 케이스 C에 첨가 한 결과를 복사하여 생성 될 것이다
Fraction C = A.plus(B).plus(D) // perhaps?
참고
plus
리턴 자체 참조하는 이유는,이 연쇄 될 수 있도록한다. 이것은 또한 작업 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);
}
.
새로운 강사를 찾으십시오. –
예에서 A를 수정하는 것이 더하기로되어 있습니까? 그렇지 않다면 A와 B의 합인 새로운 Fraction 객체를 반환해야합니다. –