C ++类使用复数乘法并返回两个值

时间:2016-07-27 07:25:28

标签: c++

我的班级女巫问题我用于复杂的数字。我想将两个复数相乘,我想返回两个值(re,im)。我使用重载运算符,但我不知道如何返回两个值。我想要使​​用这个公式(a1 + b1i) ∗ (a2 + b2i) = (a1a2 − b1b2 + (a1b2 +a2b1)i)。我想要返回re + im。

这是我的代码:

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;

我喜欢这个结果,除了这个结果:

0 3 7+2i 1.5-3.2i

0.363472-0.698001i (0.786967,-1.0907)

1-3.5i

另一个问题,如何从Q,r退回两个值ostream& printPolar(ostream&) const

1 个答案:

答案 0 :(得分: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-&gt; &#39;&#39;操作