运算符<<重载
可能重复:
运算符超载
我没有找到任何可以帮助我解决这个问题的东西......我试图过载<< 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