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

标签 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

另一个问题,如何从 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->”运算符的显式使用。

关于用于使用复数乘法并返回两个值的 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38606444/

相关文章:

c++ - 如何在 Windows 上使用 GCC 4 构建 LLVM?

c++ - 如何在 OpenFrameworks OF 0.8.4 OSX 中将输出帧记录到视频文件

c++ - 友元函数是否可以创建新对象? C++

c++ - 使用 C++ 安装驱动程序

c++ - 查找算法类

c++ - 内部选定排序循环的并行性跳过了几个数字

c++ - 打开 url mac osx c++

c++ - 证明 rand() 可以返回 0 的在线资源?

c++ - 管理二维 CUDA 阵列

c++ - 这些编译器选项放到一个 CMakeLists.txt 中