2010-12-03 43 views
6

C++で代入があり、開始に問題があります。目的は、「複素数に対して、次のオーバーロードされた演算子を使用するクラスを設計することです。>> < < + - */"複素数演算のための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"はこれらの演算子に負担をかけるので、クラス内でこれらの演算子しか使用できない(つまり、public function内で)ことができますか?もしそうなら、私はそれをこのようにしたいでしょうか?クライアント/ドライバのコードでやりたいのですか?

次に、各行の2番目の値にiを追加するだけですか?それは簡単すぎるようです。どんな方向にも感謝します。 (ちょうど記録のために、私は私のために宿題をするために誰かを探しているわけではない...ちょうどいくつかの入力を使用することができる)

答えて

7

ポイントはクラス操作のオーバーロードを示すことですので、実数と虚数に関する情報を保持するクラスComplexを作成することがアイデアです(私はそれが虚構であることを意味します)。複雑な数値間のさまざまな操作は、自分で行うオーバーライドで処理します。

これを実行して、さまざまな操作を行い、結果を画面に出力する静的なテストメソッドを作成したら、解析入力が別のタスクになるため、そのクラスを入力に使用することについて心配してくださいその中にときどき問題を小さな問題に分割するのは、同時に両方を行うよりも簡単です。

希望に役立ちます。がんばろう!

+0

それは確か行い、おかげで多くのことを。とても有難い。 –

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. 
2

あなたは少なくとも、コンプレックスというクラスを設計する必要があります。

  • あなたは実数と虚数から複雑なオブジェクトを構築することができますコンストラクタ例えば成分値Complex(1,5)

  • は、+演算子をオーバーライドして2つのComplexオブジェクトを追加し、新しいComplexオブジェクトを返します。コンプレックス(1、5)+コンプレックス(3、7)複雑である(4、12)他の事業者

しかし、最初にあなたが複素数の背後にある基本的な数学を理解する必要があるため、同様

  • ように演算子のオーバーロードメソッドを記述できます。

    (例えば複合体)クラスを定義し、複素数の実部と虚部のデータを保持することができます。

  • 1

    は、このタスクを達成するためにしなければならないいくつかのことがあります。

    過負荷、それぞれの事業者(例えば):

    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; 
    } 
    
    関連する問題