C++中的friend究竟有什么用?
一、C++中的friend的作用
1.在类里声明一个普通函数,在前面加上friend修饰,那么这个函数就成了该类的友元,可以访问该类的一切成员。
2.一个普通函数可以是多个类的友元函数。
3.一个类的成员函数也可以是另一个类的友元,从而可以使得一个类的成员函数可以操作另一个类的数据成员。
4.整个类也可以是另一个类的友元,该友元也可以称作为友类。友类的每个成员函数都可以访问另一个类的所有成员。
友元声明中声明的函数被视为已使用extern关键字声明。
friend函数是一个不是类成员的函数,但它可以访问类的私有和受保护的成员。友元函数不被视为类成员,它们是获得了特殊访问权限的普通外部函数。友元不在类的范围内除非它们是另一个类的成员,否则不能使用成员选择运算符(.和->)调用它们。friend函数由授予访问权限的类声明。可将friend声明放置在类声明中的任何位置。它不受访问控制关键字的影响。
友元关系不是相互的,除非显示指定。友元关系不能继承。友元关系不可传递。
类的外部,也就是通过实例来访问私有(private)或保护(protected)成员,这是被禁止的。但从实用性来说,的确有时很需要在外部访问,C++增加了一种称之为“友元(friend)”函数的声明,将“特权”赋给一些函数(可以是全局函数,也可以是其它类的成员函数),使之能够访问该类的私有和保护成员。
友元函数必须在类里面声明,而且友元函数一定不是该类的成员函数。另外,友元函数的声明在派生类无效,除非派生类中再声明一次,当然类型转换为基类时,使用没有任何问题。
延伸阅读:
二、友元函数的使用
友元函数的参数:
因为友元函数没有this指针,则参数要有三种情况:
要访问非static成员时,需要对象做参数;
要访问static成员或全局变量时,则不需要对象做参数;
如果做参数的对象是全局对象,则不需要对象做参数;
友元函数的位置
因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。友元函数的调用
可以直接调用友元函数,不需要通过对象或指针
友元函数的分类:
根据这个函数的来源不同,可以分为三种方法:
普通函数友元函数:
目的:使普通函数能够访问类的友元
语法:
声明: friend + 普通函数声明
实现位置:可以在类外或类中
实现代码:与普通函数相同
调用:类似普通函数,直接调用

猜你喜欢LIKE
相关推荐HOT
更多>>
为什么要放弃Lombok?
一、为什么要放弃Lombok1、JDK版本问题当用户想要将现有项目的JDK从Java 8升级到Java 11时,用户会发现Lombok不能正常工作了。于是不得不将所有...详情>>
2023-10-15 23:30:56
ios软件开发用什么工具?
一、ios软件开发工具1、Designing在应用程序的设计阶段有帮助的工具a)Free iOS PSD 是PSD格式的免费模板的集合b) Live View它有助于检查应用程...详情>>
2023-10-15 22:46:20
软件架构如何能够满足ASPICE流程?
一、软件架构如何能够满足ASPICE流程架构的用途是把整个产品划分为更为细节的板块:软件、硬件、通信等。在这个基础上软件整体将按照用途、功能...详情>>
2023-10-15 21:25:33
开发一个生鲜商城APP软件可以解决哪些问题?
1、通过便捷的购物渠道节省用户的时间现在,在社会管理、生活和学习的压力下,许多企业用户的时间越来越少。更重要的是,他们可以节省时间做自...详情>>
2023-10-15 20:37:15热门推荐
UML有哪些常用关系?
沸Spring和Spring Boot有什么区别?
热为什么要放弃Lombok?
热云下载和本地重新安装有什么区别?
新为什么Java中“1000==1000”为false,而”100==100“为true?
CameraX 1.1 有哪些新的特性发布?
ios软件开发用什么工具?
为什么编程语言中没有占用5个字节的int40?
c++的数据结构中,某个结点root的表示中!root和root!=nullptr的区别在哪?
链表的基本操作是什么?
Java中的泛型与C中的泛型有区别?
为什么二叉堆只能删除堆顶元素?
什么是单支树?
软件架构如何能够满足ASPICE流程?
技术干货






