友元
1.关键字:friend
友元分为:友元函数、友元类
2.定义:
在类内声明 :
friend 函数名(参数);
friend 类名;
3.作用:
声明为友元的函数/类(不是类的成员函数/内部类)可以访问该类的私有、保护成员
4.问题:
现在我们尝试去重载operator<<,然后发现按使用习惯我们没办法将operator<<重载成成员函数。因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作数了。但是实际使用中cout需要是第一个形参对象,才能正常使用。所以我们要将operator<<重载成全局函数。但是这样的话,又会导致类外没办法访问成员,那么这里就需要友元来解决。operator>>同理。可以重载成成员函数,但不符合使用习惯,如下图:
5.友元函数性质:
不能用const修饰,const修饰的是this,友元函数不是成员函数没有隐含的this;友元函数可以在类定义的任何地方声明,不受类访问限定符限制;一个函数可以是多个类的友元函数;友元函数的调用与普通函数的调用和原理相同
6.友元类性质:
单向,不具交换性;不具传递性;