回复 3楼 死亡骑士rq
主要是和成员函数的语法有关。
重载二元运算符为成员函数时,比如加法:如果有 a.operator+(b) 的话,就可以用 a + b 这种方法表达。这和人们期望的一致。
如果你重载 operator<< 的话,也可以用 a << cout 的方法来表达,但这种方式很别扭。而且也无法像 cout << a << b 这样链式调用了。
所以如果你希望 cout << a 这种表达成立,你就需要额外的函数,并且可能需要访问 a 的内部数据。所以 << 一般都会定义成友元函数。
>> 也是一个道理。