计算一个 class 的函数

cout a function of a class

我有一个学校的 IT 家庭作业,但我 运行 遇到了一个计算问题。该程序应该计算复数。

#include <iostream>
#include <cmath>
#include <complex>

using namespace std;

class Complex
{

public:
    Complex()
    {
        Re = 0;
        Im = 0;
    }

    Complex(float r, float i) 
    {
        Re = r;
        Im = i;
    }

    void SetRe(float n)
    {
        Re = n;
    }

    float GetRe()
    {
        return Re;
    }

    void SetIm(float n)
    {
        Im = n;
    }

    float GetIm()
    {
        return Im;
    }

    float GetR()
    {
        float r;
        float ar = pow(Re, 2);
        float br = pow(Im, 2);
        r = sqrt(ar + br);

        return r;
    }

    float GetPhi()
    {
        float phi;
        phi = atan2(Im, Re);
        phi = phi * 180 / 3.1415;
        return phi;
    }

    Complex add(Complex s2)
    {
        Complex sum(Re + s2.Re, Im + s2.Im);
        return sum;
    }

private:
    float Re;
    float Im;

};

int main()
{
    float im = 0;
    float re = 0;
    cout << " Enter Real: ";
    cin >> re;
    cout << " Enter Imag: ";
    cin >> im;
    for (int i = 0; i < 30; i++)
    {
        cout << "=";
    }
    cout << endl;

    Complex z1 = Complex(re, im);

    cout << " z1: " << z1.GetRe() << " + " << z1.GetIm() << "i" << endl;
    cout << " r: " << z1.GetR() << endl;
    cout << " Phi: " << z1.GetPhi() << endl;

    cout << " Enter Real: ";
    cin >> re;
    cout << " Enter Imag: ";
    cin >> im;

    Complex z2 = Complex(re, im);

    Complex z;

    cout << z1.add(z2); //This gives the error

    cout << " z2: " << z2.GetRe() << " + " << z2.GetIm() << "i" << endl;
    cout << " r: " << z2.GetR() << endl;
    cout << " Phi: " << z2.GetPhi() << endl;


    cout << endl;
}

我想要显示函数 z1.add(z2);,但是 Xcode 说:

Invalid operands to binary expression ('std::__1::ostream' (aka 'basic_ostream<char>') and 'Complex')

如果我删除 cout << z1.add(z2);,一切正常。

由于您的 add 方法的 return 值是 Complex 对象,您应该重载 << 运算符。

ostream & operator << (ostream &out, Complex const& c)
{
    out << c.Re;
    out << "+i" << c.Im << endl;
    return out;
}

您没有为 class Complex 定义 operator <<。所以编译器不知道如何输出一个class.

的对象

您可以通过以下方式定义它

std::ostream & operator <<( std::ostream &os, const Complex &c )
{
    return os << "{ " << c.GetRe() << ", " << c.GetIm() << "i }";
}

为此,成员函数 GetReGetIm 应使用限定符 const 声明。例如

float GetRe() const
{
    return Re;
}

float GetIm() const
{
    return Im;
}

之后你可以写

std::cout << z1.add(z2) << '\n'; 

注意成员函数add也应该声明为

Complex add( const Complex &s2 ) const 
{
    Complex sum(Re + s2.Re, Im + s2.Im);
    return sum;
}

或者只是

Complex add( const Complex &s2 ) const 
{
    return { Re + s2.Re, Im + s2.Im };
}