为什么operator<<运算符重载一定要为友元函数 为什么operator<<运算符重载一定要为友元函数呢?

一、

如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。

而 >>  或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。。。。。。就只能申明为友元函数了。。。

如果一定要声明为成员函数,只能成为如下的形式:

ostream & operator<<(ostream &output)

{

  return output;

}

所以在运用这个<<运算符时就变为这种形式了:data<<cout;

不合符人的习惯。

 

二、

cout << f1 << f2;

//用重载运算符表示,只能通过友员来实现,如果要用成员函数,则会有cout.operator<<(const F& f),所以这是不可能的.因此只能用友员来实现,operator<<(cout,f) 而cout是ostream型的,因此有以下标准格式.注意不能加const,因为cout是要改变的,会改变里的缓冲成员.

friend ostream& operator<<( ostream& cout, constF&) //输出运算符的标准重载格式.

friend istream& operator>>(istream& is, F& f){ } //输入运算符重载标准格式

 class T;
T t;
成员的话,得这么用了
t<<cout;
而不是
cout<<t
而且也无法链式使用了
cout<<t<<t<<t<<endl;

猜你喜欢

转载自www.cnblogs.com/CreatorKou/p/8888168.html