运算符重载似乎对cout两种方式都有效?

时间:2013-07-02 06:39:08

标签: c++ class operator-overloading cout

我一直在修补C ++中的类和运算符重载 - 最近我遇到了两个代码

cout << class_object

class_object << cout
如果我重载“&lt;&lt;”,

有效operator(返回单个类成员)。我的类有一个成员int num和成员函数

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

以下函数在类外定义 -

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

(假设X是班级)

知道为什么会这样吗?我似乎无法弄明白。另外,为什么&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; (课外一个,里面一个)?没有它的任何方式使其工作? 如果你不介意的话,我会喜欢关闭其工作的原因和方法。

1 个答案:

答案 0 :(得分:0)

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

以下代码:

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

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

唯一合理的代码是:

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