【探索C++】友元

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,请在评论区指正,感谢🙏


        在C++中,友元(friend)是一种特殊的关系,它允许一个类或函数访问另一个类的私有成员。通过友元关系,一个类可以将其他类或函数视为其友元,从而允许这些友元访问其私有成员,即使这些成员对于其他类或函数来说是不可访问的。

        友元关系可以在类内部声明,也可以在类外部声明。当在类内部声明时,友元可以是另一个类,也可以是一个全局函数。当在类外部声明时,友元可以是一个类的成员函数。

        友元函数是在类外部声明的函数,但被声明为某个类的友元。这意味着友元函数可以直接访问该类的私有成员和保护成员。友元函数的声明应该放在类的定义中,并使用friend关键字进行标识。
        示例代码:

class MyClass {
private:int privateData;
public:friend void friendFunction(); // 友元函数的声明
};void friendFunction() {MyClass obj;obj.privateData = 10; // 可以访问私有成员privateData
}


        友元类:一个类可以将另一个类声明为友元类,这样被声明为友元类的类可以访问该类的私有成员和保护成员。友元关系是单向的,不会自动地互相成为友元类。
        示例代码:

class FriendClass {
public:void accessPrivateData(MyClass& obj) {obj.privateData = 10; // 可以访问MyClass的私有成员privateData}
};class MyClass {
private:int privateData;friend class FriendClass; // 友元类的声明
};


        友元关系的限制:友元关系是通过类的声明而不是对象的声明建立的。因此,友元关系适用于所有该类的对象,而不仅仅是特定的对象。这意味着一个类的所有对象都可以访问其他类的私有成员,而不仅仅是某个对象。
        友元关系破坏了封装性,因此在使用友元时需要谨慎。友元应该被合理地使用,以确保不破坏类的封装性和安全性。

注意点:

1、C++中,在类的外面只能通过友元方式实现队隐藏数据的直接访问

2、需要借助类的对象(指针,引用)来实现成员的访问

3、友元关系不具有交换性的

4、友元关系不能传递

5、友元关系不能继承

        更多C/C++语言Linux系统数据结构ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉

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

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

相关文章

nvm 报错 Could not retrieve https://npm.taobao.org/mirrors/node/index.json.

报错信息如下 原因 因为淘宝的镜像域名更换,npm.taobao.org域名HTTPS证书到期更换为npmmirror.com,故此导致安装依赖报错 解决 1、进入nvm安装目录(例如:C:\Users\默认账户\AppData\Roaming\nvm)中找到settings.txt…

第八届信息系统与数据采集国际会议(ICISDM 2024)即将召开!

第八届信息系统与数据采集国际会议(ICISDM 2024)将于2024年6月24日至6月26日在美国第二大城市——洛杉矶召开。此次会议不仅展现了世界各地的科研专家们围绕着信息系统和数据采集所展开的最新的科学研究结果,而且也为来自不同地区的代表们提供…

红外弱小目标检测与跟踪

红外弱小目标检测与跟踪 1,红外弱小目标检测1.1 检测方法基于深度学习(数据驱动)基于传统方法(模型驱动)背景抑制局部对比度:最优化:1.2代码实现top-hat代码实现2,红外弱小目标跟踪根据国际光学工程学会的定义,在256256的图像中,红外小目标的像素面积不超过99。典型的…

如何进行 SEO 竞争对手分析

SEO (搜索引擎优化)的世界是一个庞大、复杂且竞争激烈的地方。如此之多,以至于你可能会觉得自己永远无法超越你的竞争对手。 但不要绝望:对竞争对手的 SEO 策略进行一些监视会大有帮助。 它涉及评估他们的关键字定位、反向链接配…

【论文阅读】Faster Neural Networks Straight from JPEG

Faster Neural Networks Straight from JPEG 论文链接:Faster Neural Networks Straight from JPEG (neurips.cc) 作者:Lionel Gueguen,Alex Sergeev,Ben Kadlec,Rosanne Liu,Jason Yosinski 机构&#…

redis的设计与实现(四)——单机数据库特性

1. 前言 我们前面了解了redis的数据结构,对象。但是redis对于这些对象的使用和管理策略需要也熟记于心,这篇文章我们就了解一下吧。 2. 类型检查和命令多态 DEL,EXPIRE,RENAME,TYPE,OBJECT 可以对任何数据类型执行SET,GET,APPEND,STRLEN,等…

【nodejs ubuntu】nodejs版本过老的更新方法

使用apt方法安装的node.js版本过于老了,以至于我没法用npm下载hexo 下面是更新方法 参考了这篇文章 然后就可以成功安装了

蓝桥杯算法赛(二进制王国)

问题描述 二进制王国是一个非常特殊的国家,因为该国家的居民仅由 0 和 1 组成。 在这个国家中,每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示,例如 101、 000、 111 等。 现在,国王选了出 N 户家庭参加邻国的庆典…

请保持你的核心竞争力

关于程序员35岁是否会失业的问题,坊间的确存在一种普遍担忧,尤其是在互联网行业,许多人担心程序员这个职业存在“35岁现象”,即35岁以上的程序员可能面临职业发展瓶颈、职位晋升困难或是被年轻程序员取代的风险。然而,…

PMP考试难不难,通过率怎样?

PMP考试自从新考纲调整后有几次考试难度是非常高的,那段时间我也看网上好多机构通过率都不咋地,当时也是因为官方的出题难度稍高,还组织了免费的重考,也是后来逐渐开始归于平常了吧,直到现在都是我认为比较简单的选择题…

机场数据治理系列介绍(4):业务流程架构对需求分析有什么作用?

目录 一、背景:需求调研分析面对的困局 二、具体做法 一、背景:需求调研分析面对的困局 一般而言,针对管理系统进行用户侧调研,用户会给你一大堆制度、手册,这些制度手册,对于理解并消化成用户需求说明书…

【WEEK5】学习目标及总结【SpringMVC+MySQL】【中文版】

学习目标: 彻底完成SpringMVC的学习 两周完成MySQL的学习——第一周 学习内容: 参考视频教程【狂神说Java】SpringMVC最新教程IDEA版通俗易懂拦截器文件的上传和下载 学习时间及产出: 第五周 MON~Fri 2024.3.25【WEEK5】 【DAY1】拦截器【…

go | struct、pointer、strings runes、interfaces

go 的结构体 不用多说,和c/c 类似 可以定义然后直接使用,注意给的实参 用 , 分隔 func main(){fmt.Println("zhangsan ", person{"zhangsan", 22})fmt.Println(newPerson("zhangsan", 22))s : person{name: "lisi&qu…

【Qt】QDialog对话框

目录 一、概念 二、对话框的分类 2.1 模态对话框 2.2 非模态对话框 2.3 混合属性对话框 三、消息对话框QMessageBox 四、颜色对话框QColorDialog 五、文件对话框QFileDialog 六、字体对话框QFontDialog 七、输入对话框QInputDialog 一、概念 对话框是GUI程序中不可或…

Java中HashMap底层数据结构及主要参数?

在Java中,HashMap的底层数据结构主要基于数组和链表,同时在Java 8及以后的版本中,当链表长度超过一定阈值时,链表会转换为红黑树来优化性能。这种结构结合了数组和链表的优点,既提供了快速的随机访问,又允许…

Unity角色多人同步

1.位置同步和状态同步&#xff1a;需要同步的节点上挂载脚本&#xff1a; gameObject.AddComponent<SyncTransform>(); ; //同步gameObject.GetComponent<SyncTransform>().syncId SyncUtilFunc.GetRoleSyncId(PlayerData.Instance.PlayerId); //同步gameObject.G…

电子元器件批发商城对供应链管理的影响与创新

电子元器件批发商城对供应链管理的影响与创新是十分重要的&#xff0c;以下是其主要影响和创新&#xff1a; 提高供应链效率&#xff1a;电子元器件批发商城通过将多个供应商的产品整合在一个平台上&#xff0c;简化了采购流程&#xff0c;降低了采购成本。采购人员可以通过一个…

有关在容器化的Jenkins中运行Docker服务记录

前提 Jenkins是容器化部署的&#xff0c;目前有后端Java的部署任务&#xff0c;完成打包生成jar包后&#xff0c;需要运行Dockerfile&#xff0c;打包生成镜像&#xff0c;进行了一些实践 参考文章 https://hackmamba.io/blog/2022/04/running-docker-in-a-jenkins-container…

算法训练day52leetcode198. 打家劫舍 213 打家劫舍2337. 打家劫舍 III

198. 打家劫舍 题目分析 动态规划数组初始化&#xff1a; dp[0]被初始化为0&#xff0c;因为没有房屋可以盗窃时的最大金额为0。dp[1]被初始化为nums[0]&#xff0c;意味着如果只有一家房屋&#xff0c;盗贼将盗取这家的金额。dp[2]被初始化为std::max(nums[0], nums[1])&am…

Qt定时器类QTimer

参考原文链接&#xff1a;https://blog.csdn.net/weixin_43780415/article/details/131389737 Qt定时器类QTimer是一个用于重复执行或延迟执行函数的类。它可以在一定时间间隔内发送一个信号&#xff0c;也可以在指定的时间后发送一个信号。QTimer是一个基于事件的定时器&#…