全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

C++中的friend究竟有什么用?

来源:千锋教育
发布人:xqq
2023-10-15

推荐

在线提问>>

一、C++中的friend的作用

1.在类里声明一个普通函数,在前面加上friend修饰,那么这个函数就成了该类的友元,可以访问该类的一切成员。

2.一个普通函数可以是多个类的友元函数。

3.一个类的成员函数也可以是另一个类的友元,从而可以使得一个类的成员函数可以操作另一个类的数据成员。

4.整个类也可以是另一个类的友元,该友元也可以称作为友类。友类的每个成员函数都可以访问另一个类的所有成员。

友元声明中声明的函数被视为已使用extern关键字声明。

friend函数是一个不是类成员的函数,但它可以访问类的私有和受保护的成员。友元函数不被视为类成员,它们是获得了特殊访问权限的普通外部函数。友元不在类的范围内除非它们是另一个类的成员,否则不能使用成员选择运算符(.和->)调用它们。friend函数由授予访问权限的类声明。可将friend声明放置在类声明中的任何位置。它不受访问控制关键字的影响。

友元关系不是相互的,除非显示指定。友元关系不能继承。友元关系不可传递。

类的外部,也就是通过实例来访问私有(private)或保护(protected)成员,这是被禁止的。但从实用性来说,的确有时很需要在外部访问,C++增加了一种称之为“友元(friend)”函数的声明,将“特权”赋给一些函数(可以是全局函数,也可以是其它类的成员函数),使之能够访问该类的私有和保护成员。

友元函数必须在类里面声明,而且友元函数一定不是该类的成员函数。另外,友元函数的声明在派生类无效,除非派生类中再声明一次,当然类型转换为基类时,使用没有任何问题。

延伸阅读:

二、友元函数的使用

友元函数的参数:

因为友元函数没有this指针,则参数要有三种情况:

要访问非static成员时,需要对象做参数;

要访问static成员或全局变量时,则不需要对象做参数;

如果做参数的对象是全局对象,则不需要对象做参数;

友元函数的位置

因为友元函数是类外的函数,所以它的声明可以放在类的私有段或公有段且没有区别。友元函数的调用

可以直接调用友元函数,不需要通过对象或指针

友元函数的分类:

根据这个函数的来源不同,可以分为三种方法:

普通函数友元函数:

目的:使普通函数能够访问类的友元

语法

声明: friend + 普通函数声明

实现位置:可以在类外或类中

实现代码:与普通函数相同

调用:类似普通函数,直接调用

相关文章

UML有哪些常用关系?

Spring和Spring Boot有什么区别?

为什么要放弃Lombok?

云下载和本地重新安装有什么区别?

为什么Java中“1000==1000”为false,而”100==100“为true?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取