我正在学习c++,我不明白如何<<>>操作符重载工作。
谁能提供一个重载操作符的方法的例子和/或解释?
class A
{
int x;
public:
A(int _x) : x(_x){}
friend ostream& operator<<(ostream& os, A elem);
};
ostream& operator<<(ostream& os, A elem)
{
os << elem.x;
return os;
}
你可以调用
std::cout << A(5); //prints 5
解释:你在这里所做的,是为一些类创建friend函数。我们把它变成朋友是因为我们想引用它的私有字段。如果您有struct,则不必将其声明为友元。
我们返回ostream&
,这样我们就可以做"链接"——如果你只返回ostream
, cout << x << y
就不能工作。出于同样的原因,我们引用了os,而且我们想要实际的流(否则你最终会写入一些副本)。我们取元素A
,因为它要被打印出来。然后,向os输出我们想要的任何内容——但请记住,你只能输出ostream可以打印的元素(例如:整型、字符串等)。我们打印到os
,然后返回它(链接)。记住,调用cout<<x
等同于调用operator<<(cout, x)
p。我回答了这个特定的<<运算符重载,因为这是我首先想到的,我想这就是你们所纠结的。您没有明确是要为ostream重载操作符,还是仅为某些类重载操作符,因此您可以将其用作某个函数。