为啥重载输入输出运算符必须是非成员函数( 二 )

对于上面代码中的写法, 并非重载了标准IO库, 而是直接定义了某个运算, 调用了标准IO的对象
如p1.operator\u0026lt;\u0026lt;(std::cout);
正确的重载行为应该是让标准io库的对象调用你自定义对象operator\u0026lt;\u0026lt;

■网友
C++中的输入输出本身就是C++对左操作符和右移操作符的重载,所以:
cout \u0026lt;\u0026lt; i; (其中cout是ostream对象) 可翻译为 cout.operator\u0026lt;\u0026lt;(i);
在XXX类中利用类成员函数的形式重载输出操作符,该函数必须只有一个ostream引用类型的参数,使用该重载函数时:
x.operator\u0026lt;\u0026lt;(cout); (其中cout是ostream对象,x为XXX类型的对象) 即 x\u0026lt;\u0026lt;cout;
" x\u0026lt;\u0026lt;cout;"这种形式与常用形式不符,将会造成混淆,若要使"cout \u0026lt;\u0026lt; x;"合法,则必须在
ostream类中添加关于XXX类的输入操作符重载函数,也就是”假设输入输出运算符是某个类的成员,则它们也必须是istream或ostream的成员。“
如果利用非成员函数形式重载输入操作符,则使用时为:
【为啥重载输入输出运算符必须是非成员函数】 operator\u0026lt;\u0026lt;(cout, x); 也可以为 cout \u0026lt;\u0026lt; x;


推荐阅读