我一直在修补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; (课外一个,里面一个)?没有它的任何方式使其工作? 如果你不介意的话,我会喜欢关闭其工作的原因和方法。
答案 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;
}