2012-02-16 17 views
0

ここでは、ユーザーに実数と虚数の2つのセットを求めるコードがあります。私も取得しないC++のクラスを使った複素数の加算と減算

#include <iostream> 

using namespace std; 

class Complex { 
    public: 
     double r; 
     double i; 
    public: 
     Complex(); 
     void add(Complex, Complex); 
     void subtract(Complex, Complex); 
     void print(); 
}; 



Complex::Complex() { 
    r = i = 0; 
} 

void Complex::add (Complex op1, Complex op2) { 
    r = op1.r+op2.r; 
    i = op1.i+op2.i; 
} 

void Complex::subtract (Complex op1, Complex op2) { 
    r = op1.r-op2.r; 
    i = op1.i-op2.i; 
} 

void Complex::print() { 
    cout << r << i; 
} 

int main() { 
    Complex operand1, operand2, result; 
    cout << "Input real part for operand one: " << endl; 
    cin >> operand1.r; 
    cout << "Input imaginary part for operand one: " << endl; 
    cin >> operand1.i; 
    cout << "Input real part for operand two: " << endl; 
    cin >> operand2.r; 
    cout << "Input imaginary part for operand two: " << endl; 
    cin >> operand2.i; 
    result.add(operand1, operand2); 
    cout << "The sum is " << result.add << endl; 
    result.subtract(operand1, operand2); 
    cout << "The difference is " << result.subtract << endl; 
} 

私はプログラムをコンパイルしたときただし、エラーの多くが表示されます(のstd :: basic_ostream)。

私が持っている別の問題は、void :: Complex printという関数にあります。 cout自体の内部に条件があるはずです。いいえ、他にはありません。しかし、私は何をすべきか分かりません。
プログラムは次のように実行する必要があります。オペランド1用
入力実部:5
オペランド1の入力虚部:2(架空のため、私は書かれてはならない)
オペランド2の入力実数部:8オペランド2用
入力虚部:1(再び、私は入力しないでください)
/、それは私と//この時間を入力(ED)番号/
(5、2I)を印刷します
(8,1i)
/答えは/
合計は13 + 3iです。
違いは-3,1iです。 //または-3、i

私を助けてください!私はC++で新しく、ここでstackoverflowであなたの助けが非常に高く評価されるでしょう。どうもありがとうございました!

+0

これはあなたの学校宿題ですか? – penartur

+0

演算子のオーバーロードについてもう少し詳しくお読みください。加算と減算の関数を正しく書くことができるはずです。 – Alexander

+0

はい、penartur。私はできることはしたが、私の知識はまだ欠けていると思う。私は指導が必要です。 –

答えて

0

mainでは、result.addを呼び出した後、何も返されないときに同じ関数をcoutストリームに入れます。私はあなたが書いていると思います< < "合計は" < < result.print();

2

COUT < < < <が< < ENDLをresult.add "和です"。 がそのメソッドへのポインタになるので、coutはそれを処理する方法を知らないため、コンパイラはそれを吐き出します。あなたがコーディングスタイルについては

cout << "The difference is " << result.subtract << endl; 

ラインのために同じことを行う必要があり

cout << "The sum is "; 
result.print(); 
cout << endl; 

変更ラインは、二つの方法は、既存の複素数をoverwrtingています。おそらく、このような機能を有すること。これは、一緒に連鎖追加することができますし、また、単に既存の複素数に複素数を追加します

Complex &Complex::add (const Complex &op) { 
    r += op.r; 
    i += op.i; 
    return *this; 
} 

良いだろう。

さらに、クラス変数とiを非公開にすることができます。これは、代替コンストラクタ必要になります。

Complex:Complex(double real, double imaginary) : r(real), i(imaginary) {}; 

を最後に、演算子のオーバーロードを検討することを望むかもしれない - 私はあなたが合理的なチュートリアルを見つけるために、それをグーグルことができます確信しています。

0

はすでにSTDを使用している::名前空間を

#include <iostream.h> 
    class Complex { 
     public: 
     double r; //real part 
     double i; //imaginary part 
     public: 
     void add(Complex, Complex); 
     void subtract(Complex, Complex); 
     void print(); 
    }; 

    void Complex::add (Complex op1, Complex op2) { 
     r = op1.r + op2.r; 
     i = op1.i + op2.i; 
    } 

    void Complex::subtract (Complex op1, Complex op2) { 
     r = op1.r - op2.r; 
     i = op1.i - op2.i; 
    } 

    void Complex::print() { 
     cout << "("<<r<<", " << i <<")"; 
    } 

    void main() { 
     Complex operand1, operand2, result; 
     cout << "\nInput real part for operand one: " << endl; 
     cin >> operand1.r; 
     cout << "Input imaginary part for operand one: " << endl; 
     cin >> operand1.i; 
     cout << "Input real part for operand two: " << endl; 
     cin >> operand2.r; 
     cout << "Input imaginary part for operand two: " << endl; 
     cin >> operand2.i; 
     cout << "\nThe sum is "; 
     result.add(operand1, operand2); 
     result.print(); 
     cout << "\nThe difference is "; 
     result.subtract(operand1, operand2); 
     result.print(); 
    } 
関連する問題