Iそれが存在することが保証されているので、this
は、現在のオブジェクトを参照するので、それがnullではありませんので、
return *this
を使用しても安全であるこのケースで考えます。上記ケース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オブジェクトを返す必要があります。 –