3.8——友元

news2024/11/25 1:10:28

类的主要特点之一是信息隐藏和封装,即类的私有成员和保护成员只能在定义的范围内使用,也就是说私有成员和保护成员只能通过类的成员函数来访问。但是,有时候我们在类外也需要访问私有成员数据或保护成员数据怎么办。这时我们就要通过友元函数来开后门了。

友元函数

友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但是它可以访问该类所有的成员,包括私有成员,保护成员和公有成员。

说明:

1)友元函数虽然可以访问类对象的私有成员,但它毕竟不是成员函数。因此,在类的外部定义友元函数时,不必像成员函数那样,在函数名前加上“类名::”。

2)因为友元函数不是类的成员,所以它不能直接访问对象的数据成员,也不能通过this指针访问对象的数据成员,它必须通过作为入口参数传递进来的对象名(或对象指针,对象引用)来访问该对象的数据成员。

1.非成员函数声明为友元函数

为什么要引入友元的机制?

友元机制是对类的封装机制机制的补充,一个类可以赋予某个函数访问它的私有成员的权限。声明一个类的友元函数,就可以用这个函数直接访问该类的私有数据,从而提高程序运行的效率。

 2.成员函数声明为友元函数

除了一般的非成员函数可以作为某个类的友元外,一个类的成员函数也可以作为另外一个类的友元,它是友元函数的一种,称为友元成员函数。友元成员函数不仅可以访问自己所在类对象中的私有成员和公有成员,还可以访问friend声明语句所在类对象的所有成员,这样能使两个类相互合作,配合工作,完成某一任务。

说明:

1)一个类的成员函数作为另一个类的友元函数时,必须先定义这个类。比如上方程序定义

    friend void circle::show_circle(point &p);
这句代码功能是声明一个circle的成员函数,show_circle是point的友元函数

我们的成员函数不能在类内使用只能在类外使用。 

友元类

不仅函数可以作为一个类的友元,一个类也可以作为另外一个类的友元,称为友元类。友元类的说明方法是在另外一个类说明加入语句。

上面可以看出友元类比友元函数强大,所以我们可以直接定义友元类来替代友元函数 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gru 串联LLm

单纯是为了降低大LLM 设计的结构 当前如果transformers 可以 输出一个状态也是可以的 这样串联的好处是每次运行知识一个小模型的计算量 时间换空间的概念 可以训练100个模型而后根据需要进行微调 从100 个中选择一个预测比较接近的进行微调预测 预测后继续进行从100中选择 而后…

Linux内核之网络协议栈以及套接字sk_buff分析

网络协议栈以及套接字sk_buff分析一、Linux 内核网络协议栈构架二、网络协议栈常见的数据结构2.1、TCP/IP 参考模型及 ISO/OSI 参考模型2.2、套接字 sk_buff 分析2.3、套接字缓冲区管理数据2.4、Linux 内核提供套接字缓冲区标准 API 函数2.5、使用一个表头来实现套接字缓冲区的…

java StringBuffer和StringBuilder

目录一、概述二、StringBuffer和StringBuilder区别三、StringBuffer使用一、概述 String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。 StringBuffer是使用缓冲区的,本身也是操作字符串的&…

工作2年,连接口自动化测试用例怎么设计都不知道?你好意思吗

目录 前言 接口信息来源 单接口测试 场景逻辑验证 异常测试 尽量自动化 独立性 可重复性 合理的断言 公共参数 数据集合 数据模板 前言 说到自动化测试,或者说接口自动化测试,多数人的第一反应是该用什么工具,比如:Py…

FTP-----局域网内部传输文件(1)

在日常工作中,如果需要跨设备的传输文件,您需要借助USB数据线或者借助应用实现无线互联,将所需文件传输到对应设备,这一来一去,花费的时间与精力变多了,那么,怎么实现不使用第三方软件来实现跨设…

【MySQL】表的操作和数据类型

前言 大家好呀~,今天继续我们的mysql学习! 本篇博客主要记录Mysql创建完数据库后,要在数据库中创建表,那么首先需要定义表的结构约束(SQL-DDL)等,这篇主要介绍基础定义表的结构(创建…

学习React与Next.js过程中的疑惑

学习React与Next.js过程中的疑惑1、为什么React中函数作为props的时候,会出现无限调用的情况,而把函数放在箭头函数中就可以解决呢?2、next.js与node.js有什么区别?3、什么是快速刷新?4、Hooks出现的原因是什么&#x…

2020年11月信息系统项目管理师真题(综合+案例)

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 1、( )使系统的描述及信息模型的表示与客观实体相对应,符合人们的思维习惯,有利于系统开发过程中用户与开发人员的…

【从零开始学Skynet】实战篇《球球大作战》(十二):场景代码设计(上)

场景服务会处理绝大部分的游戏逻辑。新建service/scene/init.lua,开始编写相关代码。1、Ball类 场景中包含小球和食物这两种对象,先看看小球的实现。代码如下所示:--球 local balls {} --[playerid] ballfunction ball()local m {playerid…

项目打包记录提交id

某天上午正在摸鱼的小邓,突然被领导拉倒一个2年前项目的现场问题沟通群,说是现场数据无法入库,需要排查,奈何不知道版本,无奈的小邓值得用时间记录一个点一个点的从gitlab中查找,为了防止后续提供到现场的版…

【蓝桥杯嵌入式】蓝桥杯嵌入式2023年第十四届省赛真题解答

目录 0 题目介绍 1 题目分析 2 Cubemx配置 4 代码 5 效果显示 0 题目介绍 具体要求如下图 1 题目分析 拿到题目咋一看,就是基本操作,实际做起来一堆定时器操作,很容易把人绕晕。 首先看看需要用到的外设 1. GPIO(key/led) 2.LCD 3…

SpringCloud:ElasticSearch之RestClient查询文档

文档的查询同样适用RestHighLevelClient对象,基本步骤包括: 1)准备Request对象2)准备请求参数3)发起请求4)解析响应 1.快速入门 我们以match_all查询为例 1.1.发起查询请求 代码解读: 第一步…

Downie4如何使用?Downie4最常用的几种下载方法

Downie 4是一款流行的 Mac 视频下载工具,可让您从各种网站下载视频,包括 YouTube、Vimeo、Twitter 等。但是Downie有多少种下载视频的方法你知道吗?接下来为大家带来最常用的几种下载方法,欢迎大家点赞收藏! 拖链接下载…

〖Python网络爬虫实战①〗- HTTP原理

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费…

道路病害识别领域创新产品RADSDS系统让道路检测更高效更实用

自从我国公路总里程数居世界第一,道路养护成为交通运维工作的重要环节。公路养护维修工作的开展,离不开对公路客观状况的检测。以往,我国依靠人工步行完成这项工作,不但干扰公路上车辆的正常通行,对检测人员安全不利&a…

【Linux】来写一个udp的服务端+客户端

来写一个udp的代码 1.socket编程接口 // 创建 socket 文件描述符 (TCP/UDP, 客户端 服务器) int socket(int domain, int type, int protocol); // 绑定端口号 (TCP/UDP, 服务器) int bind(int socket, const struct sockaddr *address,socklen_t address_len); // 开始…

个人邮箱与企业邮箱的区别有哪些?如何选择?

很多用户不了解企业邮箱,认为使用个人邮箱完全可以满足需求,其实这都是错误的观点,企业邮箱不同于个人邮箱,企业邮箱更适于商务应用的邮箱。今天就简单的做个对比。 个人邮箱与企业邮箱的区别: 1、企业形象 企业邮箱&…

STC单片机DS1307+ssd1306 oled时钟显示

STC单片机DS1307+ssd1306 oled时钟显示 📌相关篇《STC单片机DS1302+ssd1306 oled时钟显示》📍《STC单片机对DS1307读写操作》✨效果演示: 🌿实验对象:STC12C5A60S2🌿屏幕型号:I2C ssd1306 0.96“ oled🌿晶振频率:11.059MHz🌿串口波特率:9600📜串口打印读取信…

rk3568 点亮HDMI

rk3568 Android11/12 适配HDMI HDMI(High-Definition Multimedia Interface)是一种数字化音视频接口标准,用于连接高清电视、电脑、游戏机、蓝光播放器等设备。它是由HDMI联盟(HDMI Licensing, LLC)制定的&#xff0c…

奥威BI数据可视化大屏分享|多场景、多风格

数据可视化大屏一般应用在品牌推广展示、商务交流、数据分析决策、数据监控等场景,由此催生出各种不同风格的BI数据可视化大屏设计。下面就从奥威BI软件的BI报表模板中截取几个有着不同风格,起着不同作用的BI数据可视化大屏报表,一起来了解一…