运算符<<重载

可能重复:
运算符超载

我没有找到任何可以帮助我解决这个问题的东西......我试图过载<< operator ,这是我的代码:

 ostream& Complex::operator<<(ostream& out,const Complex& b){
    out<<"("<<b.x<<","<<b.y<<")";
    return out;
}    

这是H文件中的声明:

 ostream& operator<<(ostream& out,const Complex& b);

我得到这个错误: error: std::ostream& Complex::operator<<(std::ostream&, const Complex&) must take exactly one argument

什么,为什么我做错了? 谢谢


你的operator <<应该是自由函数,而不是你的情况下的Complex类成员。

如果你做了你的operator << class成员,它实际上应该有一个参数,它应该是stream 。 但是那样你就不会写出像

std::cout << complex_number;

complex_number << std::cout;

相当于

complex_number. operator << (std::cout);

正如你可以注意到的那样,这不是通用的做法,这就是为什么operator <<通常定义为自由函数。


如上所述,流式重载需要成为您课堂以外定义的免费功能。

就我个人而言,我更喜欢远离friend发送并重定向到公共成员功能:

class Complex
{
public:
   std::ostream& output(std::ostream& s) const;
};

std::ostream& operator<< (std::ostream& s, const Complex& c)
{
   return c.output(s);
}

宣布它是这样的朋友:

friend ostream& Complex::operator<<(ostream& out,const Complex& b)
{ ... }

编辑 >>

我相信以上是不对的,因为在.cpp中声明朋友是一个错误的语法,它必须在类定义中的.h文件中声明为朋友,并且只是使其成为全局函数。

class Complex
{
public:
  std::ostream& output(std::ostream& s) const;

  friend std::ostream& operator<< (std::ostream& s, const Complex& c)
  {
     return c.output(s);
  }
};

更多关于这里的朋友

链接地址: http://www.djcxy.com/p/12703.html

上一篇: operator<< overloading

下一篇: How to overload the conditional operator?