-1

これらの2つの関数をC++で作成する必要があります。ここComplexで、はクラスです。

const Complex operator*(const Complex&, double);
const Complex operator*(double, const Complex&);

私はそれらの書き方を知っていますが、それらの違いは何ですか。手伝って頂けますか?

4

4 に答える 4

6

違いは、さまざまな状況で呼び出されることです。

Complex c;
c * 10.0; // Will call the first
10.0 * c; // Will call the second

左のオペランドは常にオーバーロードされた演算子関数の最初の引数であり、右のオペランドは常に2番目の引数です。この場合、一方を他方に関して簡単に定義できます。ただし、場合によっては、非可換演算子が必要になることがあります。これにより、これが可能になります。

于 2013-02-27T17:28:37.070 に答える
3

Complex1つ目は、左側にaが付いた乗算用で​​す。complex * 2.0

Complex2つ目は、右側にaが付いた乗算用で​​す。2.0 * complex

于 2013-02-27T17:28:21.037 に答える
1

さて、最初のものは最初の引数としてdoubleを取り、2番目の引数として複素数を取りますが、2番目のものは最初の引数に複素数を取り、2番目の引数にdoubleを持ちます。複素数の乗算は対称であるため、同じ引数を交換して渡すと、どちらも同じ結果になります。それでも、他の場合には、一部の非対称操作に対してオペレーターの動作が異なる可能性があるため、両方を実装する必要があります。

于 2013-02-27T17:28:32.260 に答える
0

すべての答えは良いので、私はそれらに追加するものは何もありません。しかし、おそらくあなたのクラスにはコンストラクターがあり、doubleのようなスカラー型を使用して複素数の構築を提供します。したがって、このコンストラクターが明示的に宣言されておらず、operator *がクラスのメンバーとして宣言されていない場合は、これら2つの関数は必要ありません。

于 2013-02-27T18:03:19.623 に答える