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

C++ class for use complex numbers multiplication and return two values

本文关键字:返回 两个 用于 C++      更新时间:2023-10-16

我的用于复数的类开关有问题。我想把两个复数相乘,并返回两个值(re,im)。我使用重载运算符,但我不知道如何返回两个值。我想用这个公式(a1 + b1i) ∗ (a2 + b2i) = (a1a2 − b1b2 + (a1b2 +a2b1)i)。我要退货。

这是我的代码:

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

另一个问题是,如何从ostream& printPolar(ostream&) const中检索两个值Q,r

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->"运算符的显式使用。