家庭作业
必须同时重载 operator<<, operator== 和 operator!=
.h 文件和 .cpp 文件包括在下面:
namespace JoePitz
{
class Complex
{
// declare friend functions
friend ostream &operator<<(ostream &out, const Complex &value);
friend ostream &operator<<(ostream &out, const bool &value);
friend istream &operator>>(istream &in, Complex &value);
public:
// constructor
Complex(double real, double imaginary);
// overloading +/-/==/!= operators
Complex operator+(const Complex &compx2);
Complex operator-(const Complex &compx2);
bool operator==(const Complex &compx2);
bool operator!=(const Complex &compx2);
private:
double real;
double imaginary;
void initialize(double real, double imaginary);
};
// GCC requires friend functions to be declared in name space
ostream &operator<<(ostream &out, const Complex &value);
ostream &operator<<(ostream &out, const bool &value);
istream &operator>>(istream &in, Complex &value);
}
excerpt from .cpp file
ostream& JoePitz::operator<<(ostream &out, const Complex &value)
{
// print real
cout << value.real;
// print imaginary
if (value.imaginary == ISZERO)
{
cout << POSSIGN << value.imaginary << IMAGNSGN;
}
else if (value.imaginary > ISZERO)
{
cout << POSSIGN << value.imaginary << IMAGNSGN;
}
else
{
cout << value.imaginary << IMAGNSGN;
}
return out;
}
ostream& JoePitz::operator<<(ostream &out, const bool &value)
{
return out;
}
// overloaded == operator
bool JoePitz::Complex::operator==(const Complex &compx2)
{
return (this->real == compx2.real && this->imaginary == compx2.imaginary);
}
// overloaded != operator
bool JoePitz::Complex::operator!=(const Complex &compx2)
{
return !(this->real == compx2.real && this->imaginary == compx2.imaginary);
}
我收到以下编译错误:
../src/hw4.cpp:71: error: no match for 'operator<<' in 'c1 << " * * *\012"' ../src/Complex.h:54: 注意:候选人是: std::ostream& JoePitz::operator<<(std::ostream&, const bool&) ../src/Complex.h:53: 注意:std::ostream& JoePitz::operator<<(std::ostream&, const JoePitz ::复杂的&)
据我了解,这是不知道要实现哪个重载函数的结果。
我遇到的问题是如何处理 operator<< 函数返回一个 ostream 并接受一个 Complex 对象,但 operator== 函数返回一个 bool 的事实。
但我不知道如何更改 operator== 函数来处理 bool 和/或 Complex 对象。我试图添加另一个返回 bool 的重载 operator<< 函数,但编译器仍然存在问题。
任何帮助将不胜感激。