0

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

cout << class_object

class_object << cout

如果我重载“<<”运算符(以返回单个类成员),则可以工作。我的类有一个成员 int num,并且成员函数

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

以下函数在类外部定义 -

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

(假设 X 是类)

知道它为什么起作用吗?我似乎无法弄清楚。另外,为什么 << 需要两个函数定义(一个在类外,一个在类内)?没有它有什么办法让它工作吗?如果你不介意的话,我很想对它的工作原理和方式进行一些总结。

4

1 回答 1

0

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

以下代码:

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

利用“反转”成员运算符重载并再次反转它,因此现在 operator<< 在您的类中双向工作。

唯一合理的代码是:

ostream& operator<<(ostream& os, X &class_object)
{
   os << class_object.num;
   return os;
}
于 2013-07-02T06:48:18.027 回答