これらの2つの関数をC++で作成する必要があります。ここComplex
で、はクラスです。
const Complex operator*(const Complex&, double);
const Complex operator*(double, const Complex&);
私はそれらの書き方を知っていますが、それらの違いは何ですか。手伝って頂けますか?
違いは、さまざまな状況で呼び出されることです。
Complex c;
c * 10.0; // Will call the first
10.0 * c; // Will call the second
左のオペランドは常にオーバーロードされた演算子関数の最初の引数であり、右のオペランドは常に2番目の引数です。この場合、一方を他方に関して簡単に定義できます。ただし、場合によっては、非可換演算子が必要になることがあります。これにより、これが可能になります。
Complex
1つ目は、左側にaが付いた乗算用です。complex * 2.0
Complex
2つ目は、右側にaが付いた乗算用です。2.0 * complex
さて、最初のものは最初の引数としてdoubleを取り、2番目の引数として複素数を取りますが、2番目のものは最初の引数に複素数を取り、2番目の引数にdoubleを持ちます。複素数の乗算は対称であるため、同じ引数を交換して渡すと、どちらも同じ結果になります。それでも、他の場合には、一部の非対称操作に対してオペレーターの動作が異なる可能性があるため、両方を実装する必要があります。
すべての答えは良いので、私はそれらに追加するものは何もありません。しかし、おそらくあなたのクラスにはコンストラクターがあり、doubleのようなスカラー型を使用して複素数の構築を提供します。したがって、このコンストラクターが明示的に宣言されておらず、operator *がクラスのメンバーとして宣言されていない場合は、これら2つの関数は必要ありません。