6

C ++で割り当てがあり、開始するのに問題があります。目標は、「複素数に対して次のオーバーロードされた演算子を使用するクラスを設計することです:>> << +-*/」

私の質問は、これの構文についてではなく、ロジックについてです。ブレーンストーミングの助けを借りることができます。

入力サンプル:
2.5 -2.2
1.0 1.0

出力サンプル:
A =(2.5)+(-2.2)i
B =(1.0)+(1.0)i

A + B =(3.5)+(-1.2)i
A --B=........。 .....
A * B = ..............
A / B=.............。

では、どうすればこれを開始できますか?クラス「Complex」はこれらの演算子をオーバーロードします。つまり、これらの演算子はクラス内(つまり、パブリック関数内)でのみ使用できるということですか?もしそうなら、私はそれをこのようにしたいと思いますか?それとも、クライアント/ドライバーコードでそれを実行したいですか?

次に、各行の2番目の値にiを追加するだけですか?簡単すぎるようです。どんな方向でも大歓迎です。(念のために言っておきますが、宿題をしてくれる人を探していません...入力を使用するだけで済みます)

4

5 に答える 5

7

ポイントは、クラス操作のオーバーロードを実証することだと思われるので、実数と虚数に関する情報を保持するクラス Complex を作成することが重要だと思います (i は虚数であることを意味します)。自分で行う演算子のオーバーライドで、複素数間のさまざまな操作を処理します。

それができて、それが機能することを確認したら (さまざまな操作を実行し、結果を画面に出力する静的テスト メソッドを作成します)、そのクラスを使用して入力を操作することについて心配します。両方を同時に行うよりも、問題を小さな問題に分割する方が簡単な場合があります。

それが役立つことを願っています。幸運を!

于 2010-12-03T17:21:36.293 に答える
2

少なくとも以下を含むComplexというクラスを設計する必要があります。

  • Complex(1、5)などの実数および虚数のコンポーネント値からComplexオブジェクトを作成できるコンストラクター

  • +演算子をオーバーライドして、2つのComplexオブジェクトを追加し、新しいComplexオブジェクトを返します。例:Complex(1、5)+ Complex(3、7)is Complex(4、12)

  • 他のオペレーターについても同様です

ただし、最初に、演算子のオーバーロードメソッドを記述できるように、複素数の背後にある基本的な数学を理解する必要があります。

于 2010-12-03T17:27:32.837 に答える
2

彼らは値のペアが好きです:

A = N1 + I1i
B = N2 + I2i


A + B = (N1 + I1i) + (N2 + I2i)
      = N1 + I1i + N2 + I2i
      = (N1 + N2) + (I1i + I2i)
      = (N1 + N2) + (I1 + I2)i
A - B = (N1 + I1i) - (N2 + I2i)
      = N1 + I1i - N2 - I2i
      = (N1 - N2) + (I1i - I2i)
      = (N1 - N2) + (I1 - I2)i

// N1, N2, I1, I2 are all just normal numbers.
// You can multiply them like normal. You just have to keep track of the `i`
// Also not that i = sqrt(-1)
// Therefore  i * i = sqrt(-1) * sqrt(-1)
//                  = sqrt(-1)^2
//                  = -1
A * B = (N1 + I1i) * (N2 + I2i)
      = (N1 * N2) + (N1 * I2i) + (I1i * N2) + (I1i * I2i)
      = (N1 * N2) + (N1 * I2)i + (N2 * I1)i + (i * i * I1 * I2)
      = (N1 * N2) + i((N1 * I2) + (N2 * I1)) + (-1 * I1 * I2)

      // Simplest form
      = ((N1 * N2) - (I1 * I2)) + ((N1 * I2) + (N2 * I1))i


A / B = Repeat as above.
于 2010-12-03T17:24:55.247 に答える
1

このタスクを実行するには、いくつかの作業を行う必要があります。

複素数の実部と虚部のデータを保持できるクラス (Complex など) を定義します。

それぞれの演算子をオーバーロードします (例):

class Complex
{
public:
    // other declarations here
    Complex operator+ (const Complex& rhs) const;
    // other stuff here
};

それぞれの演算子を実装して、実際に数学演算を実行します (例):

Complex Complex::operator+ (const Complex& rhs) const
{
    Complex result = *this;
    result.Real += rhs.Real;
    result.Imaginary += rhs.Imaginary;
    return result;
}
于 2010-12-03T19:39:34.523 に答える