流运算符重载

jos*_*osh 6 c++ operator-overloading

为什么要将流操作符(<<,>>)的重载保存为朋友而不是让它们成为类的成员?

CB *_*ley 9

当您将二元运算符作为类的成员函数重载时,当第一个操作数属于类类型时,将使用重载.

对于流操作符,第一个操作数是流而不是(通常)自定义类.

因此,为传统方式使用的自定义类的重载流操作符不能是自定义类的成员函数,它们必须是自由函数.

(我假设流类不是可以更改的;如果它们是你可以添加成员函数来流类以应对其他自定义类型,但从依赖的角度来看,这通常是不可取的.)

他们是否是朋友应该取决于他们是否需要访问班级的非公开成员.