2016-07-27 19 views
0

我有一个用于复杂数字的类女巫的问题。我想乘两个复数,我想返回两个值(重新,即时)。我使用重载操作符,但我不知道如何返回两个值。我很想用这个公式(a1 + b1i) ∗ (a2 + b2i) = (a1a2 − b1b2 + (a1b2 +a2b1)i)。我想要返回re + im。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; 
} 

我想在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; 

我woudl类似,只是这个结果做到这一点:

0 3 7+2i 1.5-3.2i 

0.363472-0.698001i (0.786967,-1.0907) 

1-3.5i 

另一个问题,如何retrun 2值Q,rostream& 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; 
} 

我省略了明确的使用``这个 - >'运营商。