2016-07-27 11 views
0

複素数に使用するクラス魔法に問題があります。 2つの複素数を乗算したいと思い、2つの値(re、im)を返したいとします。私はオーバーロード演算子を使用しますが、2つの値を返す方法はわかりません。私はこの式(a1 + b1i) ∗ (a2 + b2i) = (a1a2 − b1b2 + (a1b2 +a2b1)i)を使いたいと思っています。私はリターンが欲しい。複素数乗算を使用して2つの値を返すC++クラス

これは私のコードです:

class Complex{ 
private: 
    double realteil; 
    double imaginearteil; 
public: 
    Complex(){ 
     imaginearteil=0; 
     realteil=0; 
    } 

    Complex(double real): realteil(real){ 
     imaginearteil = 0; 
    } 

    Complex(double real, double imaginear){ 
     this -> realteil = real; 
     this -> imaginearteil = imaginear; 
    } 

    double abs() const{ 
     double result = this -> realteil * this -> realteil + this -> imaginearteil * this -> imaginearteil; 
     result = pow(result,0.5); 
     return result; 
    } 

    Complex konjugiert() const{ 
     Complex result; 
     result.realteil = this -> realteil; 
     result.imaginearteil = this -> imaginearteil - 2*imaginearteil; 
     return result; 
    } 

    Complex operator + (const Complex &c){ 
     Complex result; 
     result.realteil = this -> realteil + c.realteil; 
     result.imaginearteil = this -> imaginearteil + c.imaginearteil; 
     return result; 
    } 

    Complex operator - (const Complex &c){ 
     Complex result; 
     result.realteil = this -> realteil - c.realteil; 
     result.imaginearteil = this -> imaginearteil - c.imaginearteil; 
     return result; 
    } 

    Complex operator * (const Complex &b){ 
     return ((this -> realteil * b.realteil) - (this -> imaginearteil * b.imaginearteil)) 
       - ((this -> realteil * b.imaginearteil) + (b.realteil * this -> imaginearteil)); 



    } 

    Complex operator/(const Complex &b){ } 


    ostream& printPolar(ostream&) const{ 
     double temp = realteil*realteil + imaginearteil*imaginearteil; 
     double r = pow(temp,0.5); 
     double Q; 
     if(r == 0){ 
      Q=0; 
     } 
     if(imaginearteil >=0) { 
      Q = acos(realteil/r); 
     } 
     if(imaginearteil < 0){ 
      Q = -acos(realteil/r); 
     } 


    } 



    friend ostream& operator << (ostream& output, const Complex& a); 

}; 

ostream& operator << (ostream& output, const Complex& a){ 
    if(a.imaginearteil == 0) 
     output << a.realteil; 

    if(a.imaginearteil < 0) 
     output << a.realteil <<a.imaginearteil<<"i"; 

    if(a.imaginearteil > 0) 
     output << a.realteil <<"+" <<a.imaginearteil<<"i"; 

    return output; 
} 


int main() { 

    Complex a,b(3),c(7,2),d(1.5,-3.2); 

    cout <<c<<endl; 
    cout <<c.konjugiert(); 
    a = c*d; 

    cout << a; 


    //cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; 
    // Complex x=(b+2)*(c-d.abs())/(b-c.konjugiert()*d); 

    return 0; 
} 

は、私はこの結果を除いようwoudl main()

Complex a,b(3),c(7,2),d(1.5,-3.2); 

cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl; 

Complex x=(b+2)*(c-d.abs())/(b-c.konjugiert()*d); 

cout<<x<<" "; 

x.printPolar(cout); 

cout<<endl; 

でこれを実行したい:

0 3 7+2i 1.5-3.2i 

0.363472-0.698001i (0.786967,-1.0907) 

1-3.5i 

2をretrunする方法もう一つの問題、値Q,rからostream& printPolar(ostream&) constまで?

+0

これはすでに 'operator +'と 'operator-'で行っています。 –

+0

このプロパティの使い方は?私は自分の質問を編集して結果を出します。 – lukassz

+0

'Complex'を返しますか?しかし、あなたが主張するなら、 'std :: tie'を使うことができます。 – Mine

答えて

1
Complex operator * (const Complex &b) const { 
    Complex result(
    realteil * b.realteil - imaginearteil*b.imaginearteil, // real part 
    realteil * b.imaginearteil + b.realteil * imaginearteil // img part 
    ); 

    return result; 
} 

私は `` this-> '' 演算子を明示的に使用を省略。

関連する問題