<<运算符重载作为c ++中的类方法

时间:2013-01-30 10:36:43

标签: c++ operator-overloading

我想重载<<我的班级的操作员。

原型如下:

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?

3 个答案:

答案 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);
}