重载*=用于复数

Overloading *= for complex numbers

本文关键字:用于 重载      更新时间:2023-10-16

我遇到了麻烦,得到的算术函数(a+bi)*(c+di),这是相同的(ac-bd) + (ad+bc)与重载操作符(*=)到目前为止,我的重载函数是这样的。对于我对重载*=的定义,我不知道该写什么来包含(ac-bd)的-bd部分。

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
class Complex {
public:
    Complex(double = 0, double = 0);
    void print() const { cout << real << 't' << imag << 'n'; }
    // Overloaded +=
    Complex& operator +=(const Complex&);
    // Overloaded -=
    Complex& operator -=(const Complex&);
    // Overloaded *=
    Complex& operator *=(const Complex&);
    // Overloaded /=
    Complex& operator /=(const Complex&);
    double Re() const { return real; }
    double Im() const { return imag; }
private:
    double real, imag;
};
int main()
{
    Complex x, y(2), z(3, 4.5), a(1, 2), b(3, 4);
    x.print();
    y.print();
    z.print();
    y += z;
    y.print();
    a *= b;
    a.print();
    return 0;
}
Complex::Complex(double reel, double imaginary)
{
    real = reel;
    imag = imaginary;
}
// Return types that matches the one in the prototype = &Complex
Complex& Complex::operator+=(const Complex& z)
{
    real += z.Re();
    imag += z.Im();
    //How to get an object to refer to itself
    return *this;
}
Complex& Complex::operator *= (const Complex& z)
{
    real *= (z.Re());
    imag *= z.Re();
    return *this;
}

您可以使用std::tiestd::make_tuple执行多个赋值:

std::tie(real, imag) = std::make_tuple(real*z.real - imag*z.imag,
                                       real*z.imag + imag*z.real);
return *this;