1

我想为我的类 Complex 重载 << 运算符。

原型如下:

void Complex::operator << (ostream &out)
{
    out << "The number is: (" << re <<", " << im <<")."<<endl;
}

它有效,但我必须这样称呼它:object << cout 用于标准输出。我该怎么做才能让它向后工作,比如 cout << object?

我知道'this'指针默认是发送给方法的第一个参数,所以这就是二进制运算符只能工作的原因 obj << ostream。我将它作为全局函数重载,没有问题。

有没有办法将 << 运算符重载为方法并将其称为 ostream << obj?

4

3 回答 3

2

我只会使用通常的 C++ 模式的free function。如果你想让类的私有数据成员对它可见,你可以让它friend进入你的类,但通常复数类会公开实部和虚部系数的公共 getter。ComplexComplex

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;
}
于 2013-01-30T10:46:09.150 回答
1

您可以编写一个自由支架operator<<功能,尝试:

std::ostream& operator<< (std::ostream &out, const Complex& cm)
{
    out << "The number is: (" << cm.re <<", " << cm.im <<")." << std::endl;
    return out;
}
于 2013-01-30T10:38:29.827 回答
0

您可以定义一个全局函数:

void operator << (ostream& out, const Complex& complex)
{
     complex.operator<<(out);
}
于 2013-01-30T10:42:54.207 回答