十、C++ 友元

发布时间:2026/10/28 2:02:45

十、C++ 友元 1、友元1.1 友元产生的背景C 面向的对象编程的三大特征封装 继承 多态其中封装要求将类中属性设置成private私有的属性就不能在类外直接访问了保护了属性的安全性如果类外要求访问类中私有属性需要提供对外的读写接口外部可以通过调接口的方式访问到类中的私有属性。可是如果类外需要频繁访问类中私有属性的话我们改怎么办呢方法一如果频繁访问接口我们就频繁调用接口可是调接口就是调函数函数调用需要经历函数传参、类型比较、安全检测、内存分配.....等一系写操作非常消耗性能如果频繁调用系统性能就会降低显然这不是一个好的选择。方法二使用友元只要在类的内部使用friend关键字进行友元说明就可以无需调接口直接访问类内私有成员这样可以提高效率。但是友元在一定程度上有破坏了类的封装性所有友元要慎用。使用友元的相关注意点友元不是类的成员却可以直接访问类中私有成员提高了运行效率友元破坏了类的封装性要慎用友元的实现方式有三种友元函数友元类友元成员函数1.2 友元函数友元函数是友元使用最多的一种实现方式。概念类外一个普通函数想要访问某一个对象所属类的私有属性直接访问不行调接口访问太麻烦(消耗性能)那就成为这个类的友元即可则该函数就叫做这个类的友元函数。相关注意点友元函数需要在类的内部使用friend关键字进行友元说明,说明的位置可以是类中任意位置不受权限修饰符的限制。友元函数不是类的成员函数没有this指针但可以访问类中的任何成员友元函数的参数类型一般是对象的引用例如Test t理论上友元函数可以同时访问多个类的私有成员只要在每个类中有友元说明。#include iostream using namespace std; class Test{ private: int num; public: Test(int num) :num(num) { } //show int show(void) const { return this-num; } //num读接口 int get_num(void) const { return this-num; } //类内声明友元函数 使用friend friend void func(Test t); }; //普通函数 void func(Test t) { cout t.num endl; } int main() { Test t1(90); func(t1); return 0; }1.3 友元类概念一个类B,想访问另一个类A中的私有成员只需要将类B在类A中进行友元说明类B就可以访问类A的所有成员此时类B叫做类A的友元类。相关注意点友元关系是单向的不具有交换性(你是我的朋友不代表我一定是你的朋友)友元关系不具有传递性(朋友的朋友不是我的朋友)友元关系不能被继承(爸爸的朋友不是我的朋友)#include iostream using namespace std; /*友元类 当一个类B想访问另一个类A中的私有成员需要在类A中声明友元类 注意 (1)友元关系是单向的不具有交换性(你是我的朋友不代表我一定是你的朋友) (2)友元不具有传递性 (朋友的朋友不是我的朋友) (3)友元不能继承 (爸爸的朋友不是我的朋友) */ class A{ private: int a; public: A(int a) { this-a a; } //a读接口 int get_a(void) const { return a; } //友元类的说明 friend class B; }; class B{ public: void func(A t) { cout t.a endl; } }; int main() { A obj1(80); B obj2; obj2.func(obj1); return 0; }1.4 友元成员函数概念类B中的一个成员函数想访问另一个类A中的私有成员需要在类A中进行友元说明说明类B中的这个成员函数是类A的友元成员函数#include iostream using namespace std; //友元成员函数 //类B中的一个成员函数想访问另一个类A中的私有成员需要在把该成员函数在类A中声明为友元成员函数 class A; class B{ public: //类内成员需要类内声明 类外定义 void fun(A p); }; class A{ private: int num; public: A(int num) :num(num) { } //友元成员函数的声明 friend void B::fun(A p); }; //类外定义B类中的成员函数 void B::fun(A p) { cout p.num endl; } int main() { A test1(800); B test2; test2.fun(test1); return 0; }
延伸阅读

更多相关文章

2026/10/28 2:02:45

大面积太阳光模拟器如何提高辐照均匀性

航天载荷标定、热平衡试验要求大面积太阳光模拟器给出均匀照射。面积放大不带来辐照均匀性。研究表明太阳光模拟器光学系统的难点在聚光、匀光与投影。把自由曲面聚光器、光学积分器和远心投影系统串成一条光路。大面积辐照系统在 1200 mm1200 mm 面内,不均匀性压到…

2026/10/28 2:02:45

AI IDE 与 Agent Harness:一次说清 Cursor、Codex 该怎么选

目录一、先把两个词掰开1.1 AI IDE:编辑器是本体,AI 是长在编辑器里的一层1.2 Agent Harness:模型是发动机,Harness 是整台车1.3 一个更直白的比喻1.4 边界在哪:一张表说清二、2026 年的三条主流路线2.1 路线一&#x…

2026/10/28 2:02:45

从0开始学架构-45:架构重构内功心法第一式有的放矢

在专栏第8期“架构设计三原则”中的演化原则部分,我提到了系统的架构是不断演化的,少部分架构演化可能需要推倒重来进行重写,但绝大部分的架构演化都是通过架构重构来实现的。相比全新的架构设计来说,架构重构对架构师的要求更高,主要体现在: 业务已经上线,不能停下来…

2026/10/28 3:17:48

CAD图纸矢量导入技术文档的最佳实践

1. 问题背景与行业痛点在芯片制造企业的技术文档协作场景中,设计部门经常需要将CAD图纸插入到技术文档系统中。传统解决方案通常采用截图或位图粘贴的方式,但这会导致两个严重问题:图像质量损失:放大查看时出现像素模糊&#xff0…

2026/10/28 3:17:48

.NET文旅信息管理系统开发实践与优化策略

1. 项目背景与核心价值西安作为十三朝古都,拥有丰富的历史文化资源。随着文旅产业的数字化转型,传统的人工信息管理方式已无法满足现代旅游服务的需求。这个基于.NET的文旅信息管理系统正是针对这一痛点设计的毕业设计项目。我在实际开发中发现&#xff…

2026/10/28 3:17:48

工业HMI变量共享机制解析:从地址映射到符号引用的工程实践

简介:这份PDF是欧姆龙NA系列人机界面的官方产品样本,面向从事工业自动化机械设计、电气调试与HMI画面开发的工程师,以及需要为设备选型或进行全球化部署的技术人员。样本围绕Sysmac自动化平台展开,系统介绍NA系列宽屏HMI的定位与能…

2026/10/28 3:17:48

富林泰克FT220汽车衡仪表安装调试全攻略:从选型接线到标定避坑

简介:富林泰克FT220汽车衡仪表技术手册(V18版)面向汽车衡安装调试人员、计量运维工程师及工业称重设备使用者,系统讲解FT220称重显示器的技术指标、主要功能、外形尺寸与型号划分,并覆盖安装调试、开箱检查、电气连接等…

2026/10/28 3:17:48

医药零售系统跨平台开发:嵌套数组数据结构实践

1. 项目背景与需求分析在医药零售行业数字化转型过程中,一个长期存在的技术痛点是如何高效管理药品与多药店之间的复杂关联关系。传统解决方案通常采用关系型数据库的表连接方式,但这在移动端应用场景下会面临性能瓶颈和开发效率问题。我们最近在开发一个…

2026/10/28 3:12:48

企业级数据异常检测仪表盘架构与性能优化实战

1. 项目概述:企业级数据异常检测仪表盘的核心价值在数据驱动的商业决策时代,企业每天需要处理TB级甚至PB级的业务数据流。作为数据团队的核心成员,我经常遇到这样的场景:凌晨三点被告警电话惊醒,原因是某关键业务指标出…

2026/10/27 14:24:03

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/28 0:02:13

Python股票自动交易系统源码解析:从行情获取到风控的完整链路

简介:这份资源是面向高校计算机、金融相关专业毕业设计场景的完整项目源码包,主题为基于Python的股票自动交易系统,适合需要完成毕设选题、课程设计或自学金融量化交易开发的学生与开发者参考。压缩包共收录687个文件,整体约14.93…

2026/10/28 0:02:13

视酷酷信IM源码部署指南:Java 17+MySQL 8.0.33实战配置

简介:这是一套2024年亲测可部署的视酷酷信IM即时通讯系统源码,面向具备Java、OC、C#及Vue开发能力的技术人员,解决私有化即时通讯平台快速搭建与二次定制需求,尤其适用于需集成商城、保障数据主权的中小型企业或独立开发者。资源共…

2026/10/28 0:02:13

Python爬取百度迁徙数据:接口解析、批量采集与避坑指南

简介:这份资源是一个用Python爬取百度迁徙数据的脚本压缩包,面向具备Python基础、希望入门网络爬虫与数据解析的开发者,解决按日期获取全国热门城市人口迁徙数据的问题。包内共1个文件,为单个py脚本,压缩包约1KB&#…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑