我想重载<<我的班级的操作员。
原型如下:
void Complex::operator << (ostream &out)
{
out << "The number is: (" << re <<", " << im <<")."<<endl;
}
它有效,但我必须这样称呼:object&lt;&lt; cout为标准输出。 我可以做些什么来让它向后工作,比如cout&lt;&lt;对象
我知道'this'指针默认是发送给方法的第一个参数,这就是为什么二元运算符只能用于obj&lt;&lt; ostream的。我把它作为一个全局函数重载,没有问题。
有没有办法重载&lt;&lt;运算符作为一种方法并将其称为ostream&lt;&lt; OBJ?
答案 0 :(得分:2)
我会使用 free function 的常用C ++模式。如果您想让friend
类的私有数据成员可见,则可以将Complex
设置为Complex
类,但通常复杂的数字类会公开实际部分和虚构的公共getter系数。
class Complex
{
....
friend std::ostream& operator<<(std::ostream &out, const Complex& c);
private:
double re;
double im;
};
inline std::ostream& operator<<(std::ostream &out, const Complex& c)
{
out << "The number is: (" << c.re << ", " << c.im << ").\n";
return out;
}
答案 1 :(得分:1)
你可以写一个免费的展台operator<<
功能,试试:
std::ostream& operator<< (std::ostream &out, const Complex& cm)
{
out << "The number is: (" << cm.re <<", " << cm.im <<")." << std::endl;
return out;
}
答案 2 :(得分:0)
您可以定义全局函数:
void operator << (ostream& out, const Complex& complex)
{
complex.operator<<(out);
}