前言:
作者简介:大家好,我是翼同学!
个人主页:翼同学的CSDN博客
系列专栏:【C++学习笔记】更新中…
备注:如果文章有误,请指正,万分感谢!让我们一起学习,一起进步。
✅最后:如果文章对您有帮助,请三连支持一下博主哦。
本章知识点:
- 什么是友元?
- 友元有什么特点?
- 为什么有友元这个概念?
- 友元的分类有哪些?
- 如何创建和使用友元?
- 友元是一种定义在类外部的普通函数或类
- 它需要在类体内进行说明
- 为了与该类的成员函数区别开,我们会在说明时前面加以关键字
friend
- 简单的说,友元就是一种关系
- 一种类与函数或者类与类之间的关系
- 友元可以访问类中的私有成员。 (类似:朋友是值得信任的,可以对朋友公开一些自己的隐私。)
- 友元关系无法被继承 (类似:你爸爸的朋友不一定是你的朋友)
- 友元关系是单向的(类似:类A是类B的朋友,但B不一定是A的朋友)
- 友元关系无法传递(类似:即B是A的友元,C是B的友元,但是C不一定是A的友元。)
- 我们知道,类具有封装性,即数据隐藏性。
- 只有类的成员函数,才能访问类的私有成员。
- 源文件中的其他函数是无法访问私有成员的。
- 那么一般我们会设置一些公共接口来对外开放。
- 即非成员函数可以访问类中的公有成员。
- 但有时候,类的访问权限在某些应用场合会显得有些呆板。
- 如果将数据成员都定义为公有的,这又破坏了隐藏的特性。
- 所以就有了友元的概念。
- 友元被授予从外部访问类的私有部分的权限(即对某些类外的函数“开后门”)
- 这也提高了类公有接口的灵活性。
- 但是需要注意,友元破坏了类的整体操作性,也破坏了类的封装性。
- 所以我们要有选择的使用友元
分类:
- 友元类
- 友元函数
友元关系可以是一个函数,该函数被称为友元函数。
友元也可以是一个类,该类被称为友元类。
关键字:frend
我们需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend
下面着重看看友元类以及友元函数!
首先我们定义一个类:
这个myBuilding
类就相当于我的家,现在定义另一个类,是我的朋友类
并且我的朋友想访问我家的客厅和卧室
很显然,不可访问!
这是因为,在
myBuilding
这个类中,我的卧室是一个私有的,外部无法访问。但是如果我们在
myBuilding
类中声明myFriend
这个类是友元关系的,即friend class myFriend;
那么此时
myFriend
这个类就是一个友元类,它可以访问类似私有成员。
所以完整代码如下:
运行结果为:
朋友在访问:我的客厅
朋友在访问:我的卧室
一旦我们将一个类声明为另一个类的友元,就意味着这个类的所有成员函数都是另一个类的友元函数,即都可以访问另一个类中私有成员或保护成员。
但有时候我们并不想让类的所有成员都能访问另一个类的私有成员,那么此时我们可以将类的部分成员函数声明为友元函数,这样就只有友元函数可以访问另一个类的私有成员, 而不是整个类都能访问另一个类的私有成员。
因此总结的说,友元函数就是能够访问另一个类的私有成员的一个函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
比如在myBuilding
这个类中,我们声明了visit1
是一个友元函数,因此visit1
可以访问myBuilding
的私有成员m_BedRoom
而在myFriend
类中,visit2
是访问不了myBuilding
中的私有成员
所以在主函数中是这样的:
好了,看完本篇文章,相信你能理解友元关系,欢迎到评论区一起讨论!