如何重载 iostream 运算符以对整个流执行功能
How to overload iostream operator to do perform a function on entire stream
我正在写一个简单的 link 列表,它工作正常,但我坚持要重载 ostream(好吧,我不确定我是说 ostream 还是 instream!):
class List
{
public:
void addToEnd(int data);
/* operator overloads */
friend std::istream& operator >> (std::istream& is, int data);
};
std::istream& operator>>(std::istream& is, int data)
{
for(int i = 0; i < is.gcount(); i++)
{
// how to call ist::addToEnd(data);
}
}
我想以某种方式让它能够:
List list();
list << 2 << 3 << 4;
以便我使用此表单而不是调用 addToEnd(X)
您展示的例子是:
list << 2 << 3 << 4;
显然您需要重载 operator <<
,而不是 operator >>
。 <<
的参数是 List
和 int
,所以你需要的函数是:
List& operator <<(List& list, int data)
{
list.addToEnd(data);
return list;
}
注意这个函数不需要是友元,因为它只使用了List
的public个方法。
不涉及 istream 或 ostream。
我正在写一个简单的 link 列表,它工作正常,但我坚持要重载 ostream(好吧,我不确定我是说 ostream 还是 instream!):
class List
{
public:
void addToEnd(int data);
/* operator overloads */
friend std::istream& operator >> (std::istream& is, int data);
};
std::istream& operator>>(std::istream& is, int data)
{
for(int i = 0; i < is.gcount(); i++)
{
// how to call ist::addToEnd(data);
}
}
我想以某种方式让它能够:
List list();
list << 2 << 3 << 4;
以便我使用此表单而不是调用 addToEnd(X)
您展示的例子是:
list << 2 << 3 << 4;
显然您需要重载 operator <<
,而不是 operator >>
。 <<
的参数是 List
和 int
,所以你需要的函数是:
List& operator <<(List& list, int data)
{
list.addToEnd(data);
return list;
}
注意这个函数不需要是友元,因为它只使用了List
的public个方法。
不涉及 istream 或 ostream。