【探索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日在美国第二大城市——洛杉矶召开。此次会议不仅展现了世界各地的科研专家们围绕着信息系统和数据采集所展开的最新的科学研究结果,而且也为来自不同地区的代表们提供…

如何进行 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 户家庭参加邻国的庆典…

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

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

【Qt】QDialog对话框

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

Unity角色多人同步

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

Qt定时器类QTimer

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

鸿蒙OS开发实例:【工具类封装-页面路由】

import common from ohos.app.ability.common; import router from ohos.router 封装app内的页面之间跳转、app与app之间的跳转工具类 【使用要求】 DevEco Studio 3.1.1 Release api 9 【使用示例】 import MyRouterUtil from ../common/utils/MyRouterUtil MyRouterUtil…

giteed的使用

1. 将工作区的内容添加到暂存区 你的工作区要有内容&#xff08;.git 不算&#xff09; 注意&#xff1a;空文件可以添加&#xff0c;但是空文件夹不管 如果没有形成历史版本之前&#xff0c;暂存区的同名文件会被覆盖 //打开命令行&#xff0c;切换到 .git所在的目录&…

JVM常见垃圾收集算法

JVM常见垃圾收集算法 标记-清除算法复制算法标记-整理&#xff08;标记压缩&#xff09;算法分代收集算法新生代和老年代分代收集算法工作机制 面试题&#xff1a;为什么分代收集算法把堆分成年轻代和老年代&#xff1f; 标记-清除算法 最基础的算法&#xff0c;分标记和清除两…

红队笔记8-CTF5打靶流程-CMS漏洞-多用户信息泄露(vulnhub)

目录 开头: 1.主机发现和端口扫描&#xff1a; 2.80端口-NanoCMS哈希密码信息泄露-后台getshell 3.提权-用户过多信息泄露 4.总结&#xff1a; 开头: 学习的视频是哔哩哔哩红队笔记&#xff1a; 「红队笔记」靶机精讲&#xff1a;LAMPSecurityCTF5 - 标准攻击链&#xff…

ByteTrack多目标跟踪——yolox_model代码详解

文章目录 yolox_modelYOLOPAFPNYOLOXHeadmodel损失计算初步筛选SimOTA 求解 附&#xff1a;网络结构Cls headCls_convsCls_preds Reg headReg_convsReg_preds Obj headObj_preds yolox_model yolox_model主要包括以下几个文件:yolox.py、yolo_pafpn.py以及yolo_head.py train时…

[AIGC] MySQL存储引擎详解

MySQL 是一种颇受欢迎的开源关系型数据库系统&#xff0c;它的强大功能、灵活性和开放性赢得了用户们的广泛赞誉。在 MySQL 中&#xff0c;有一项特别重要的技术就是存储引擎。在本文中&#xff0c;我们将详细介绍什么是存储引擎&#xff0c;以及MySQL中常见的一些存储引擎。 文…

申请GeoTrust数字证书

GeoTrust介绍&#xff1a; 大家应该都不陌生&#xff0c;作为最老资格的一批国际大牌证书&#xff0c;GeoTrust的品牌效益和使用群体非常庞大。在数字证书领域也是当之无愧的龙头地位&#xff0c;作为Symantec和Digicert的子品牌&#xff0c;证书安全性能方面毋庸置疑&#xf…

IP SSL证书注册流程

使用IP地址申请SSL证书&#xff0c;需要用公网IP地址申请&#xff0c;申请之前确保直接的IP地址可以开放80或者443端口两者选择1个就好&#xff0c;端口不需要一直开放&#xff0c;只要认证的几分钟内开放就可以了&#xff0c;然后IP地址根目录可以上传txt文件。 IP SSL证书认…

Codeforces Round 800 (Div. 1)C. Keshi in Search of AmShZ 反向dijkstra,并附带权值

Problem - C - Codeforces 目录 题意&#xff1a; 思路&#xff1a; 答疑&#xff1a; 1.为什么反向做呢&#xff1f; 2.为什么是到达点的剩余度数呢&#xff1f; 3.相同路是否可以去重&#xff0c;用个set&#xff1f; 4.如果有多条路相同呢&#xff1f; 参考代码&am…