计算一个 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 }";
}
为此,成员函数 GetRe
和 GetIm
应使用限定符 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 };
}
我有一个学校的 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 }";
}
为此,成员函数 GetRe
和 GetIm
应使用限定符 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 };
}