以下是引用zgxyz2008在2010-12-30 21:11:41的发言:
"<<,>>"不是必须是友元函数重载,只是习惯而已,你只要看看我们在调用重载运算符是怎么调用的就知道了,如果我们将"<<,>>"定义类的成员,那么我们调用时左操作数只能为该类类型的对象,就要这样写:myclass item;item<
说得不错,其实operator<<之类的也不一定需要作为友元函数的:
class A
{
istream& operator<<( istream& is ) const;
};
template<typename T>
istream& operator<<( istream& is, const T& t )
{
return t << is;
}
这样可以避免声明一个友元。友元根本不该存在的