我正在学习c ++而我不明白<<和>>运算符重载工作。
有人可以提供一个重载任何一个运算符的方法的示例和/或解释吗?
答案 0 :(得分:1)
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
说明:你在这里做的是为某个班级做朋友的功能。我们要把它变成朋友,因为我们想要引用它的私人领域。如果您有结构,则不必将其声明为朋友。
我们正在返回ostream&
,以便我们可以进行&#34;链接&#34; - 如果您仅返回cout << x << y
,ostream
将无效。
我们出于同样的原因参考了操作系统,而且我们想要实际的流(否则你最终会写入一些副本)。我们正在接受elem A
,因为它将被打印出来。然后,我们打印到任何我们想要的东西 - 但请记住,你只能打印ostream可以打印的元素(例如,整数,字符串等)。我们打印到os
,然后我们返回它(链接)。
请注意,调用cout<<x
等同于调用operator<<(cout, x)
PS。我回答了这个具体的&lt;&lt;操作员超载,因为这首先出现在我脑海中,我认为这就是你正在努力的事情。您没有明确是否要为ostream重载运算符,或者仅为某些类重载运算符,因此您可以将其用作某些函数。