运算符重载似乎对cout起到了双向作用

Operator overloading seems to work both ways for cout?

本文关键字:作用 cout 重载 运算符      更新时间:2023-10-16

我一直在C++中修改类和运算符重载,最近我发现了一个代码,其中

cout << class_object

class_object << cout

如果我使'<lt;'运算符(返回单个类成员)。我的类有一个成员int num和成员函数

ostream& operator << (ostream& os)
{
   os << num;
   return os;
}

以下函数在类之外定义-

ostream& operator<<(ostream& os, X &class_object)
{
   return class_object << os ;
}

(假设X是类)

知道为什么它有效吗?我好像想不通。此外,为什么两个函数定义对于<lt;(一个在教室外,一个在里面)?有没有办法让它在没有这个的情况下工作?如果你不介意的话,我很想结束一下它的工作原理。

成员函数使class_object << cout;工作,因为成员函数有一个指向对象的指针作为第一个隐式参数。这是错误的,因为它在C++中是违反直觉的。

以下代码:

ostream& operator<<(ostream& os, X &class_object)
{
   return class_object << os;
}

利用"反转"成员运算符重载并再次反转它,所以现在运算符<lt;为你的班级双向工作。

唯一合理的代码是:

ostream& operator<<(ostream& os, X &class_object)
{
   os << class_object.num;
   return os;
}