友元
类的主要特点之一是数据隐藏,也就是类的私有成员或保护成员只能通过它的成员函数来访问。C++中提供友元机制解决在类外对某个对象的私有成员或保护成员进行操作。
友元函数提高了程序的运行效率,实现了类之间的数据共享,方便了编程。但是声明友元函数相当于在实现封装的黑盒子上开了一个黑洞,如果一个类声明了许多友元,则相当于在黑盒子上开了许多洞,在一定程度上破坏了数据的隐蔽性和类的封装性,降低了程序的可维护性。
声明友元类就像把自家的钥匙给了另一个类,意思是你是我的朋友,我很信任你,你可以来我家,并且家里的东西你可以随便用。也可以理解为:设置了一个白名单。
1. 友元函数
2. 友元类
注意:
- 友元关系是单向的
- 友元关系不能传递
- 友元函数可以在类的私有部分声明,也可以在类的共有部分进行声明
- 友元函数在定义的时候,不用在函数面前加"类名::",因为它不是该类的成员函数
- 友元函数没有this指针
- 调用友元函数时必须在它的实参表中给出要访问的对象
- 友元函数不是当前类中的成员函数,它可以是一个不属于任何一个类的普通函数,也可以是另一个类的成员函数