c++ primer plus 第15章友,异常和其他:15.1.3 其他友元关系

c++ primer plus 第15章友,异常和其他:15.1.3 其他友元关系

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
15.1.3 其他友元关系


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • c++ primer plus 第15章友,异常和其他:15.1.3 其他友元关系
  • 15.1.3 其他友元关系


15.1.3 其他友元关系

除本章前面讨论的,还有其他友元和类的组合形式,下面简要地介绍其中的一些。假设由于技术进步,出现了交互式遥控器。例如,交互式遥控器让您能够回答电视节目中的问题,如果回答错误,电视将在控制器上产生嗡嗡声。忽略电视使用这种设施安排观众进入节目的可能性,我们只看 C++的编程方面。新的方案将受益于相互的友情,一些Remote 方法能够像前面那样影响 Tv 对象,而一些 Tv 方法也能影响 Remote 对象。这可以通过让类彼此成为对方的友元来实现,即除了Remote是Tv的友元外,TV

还是 Remote的友元。需要记住的一点是,对于使用 Remote 对象的Tv方法,其原型可在 Remote 类声明之前声明,但必须在 Remote 类声明之后定义,以便编译器有足够的信息来编译该方法。这种方案与下面类似:

class Tv
{
friend class Remote;
public :void buzz(Remote & r);
}class Remote
{
friend class Tv;
public :void Bool volup(Tv&t){t.volup();}{...}
};
inline void Tv::buzz(Remote & r)
{
...
}

由于 Remote的声明位于Tv声明的后面,所以可以在类声明中定义Remote::volup(),但Tv::buzz()方法必须在Tv声明的外部定义,使其位于Remote 声明的后面。如果不希望 buzz()是内联的,则应在一个单独的方法定义文件中定义它。

#15.1.4 共同的友元
需要使用友元的另一种情况是,函数需要访问两个类的私有数据。从逻辑上看,这样的函数应是每个类的成员函数,但这是不可能的。它可以是一个类的成员,同时是另一个类的友元,但有时将函数作为两个类的友元更合理。例如,假定有一个Probe类和一个 Analyzer 类,前者表示某种可编程的测量设备,后者表示某种可编程的分析设备。这两个类都有内部时钟,且希望它们能够同步,则应该包含下述代码行:

class Analyzer;//forward declaration
class Probe
{
friend void sync(Analyzer &a,const Probe & p);// sync a to pfriend 
void sync(Probe &p,const Analyzer & a);// sync p to a
};class Analyzer{friend void sync(Analyzer &a,const Probe &p);// sync a to pfriend void sync(Probe &p,const Analyzer & a);//sync pto a...
}//define the friend functions
inline void sync(Analyzer & a,const Probe & p)
{
...
}
inline void sync(Probe &p,const Analyzer & a)
{
...
}

前向声明使编译器看到 Probe 类声明中的友元声明时,知道 Analyzer 是一种类型。

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

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

相关文章

整洁架构SOLID-单一职责原则(SRP)

文章目录 定义案例分析重复的假象代码合并解决方案 小结 定义 SRP是SOLID五大设计原则中最容易被误解的一个。也许是名字的原因,很多程序员根据SRP这个名字想当然地认为这个原则就是指:每个模块都应该只做一件事。 在历史上,我们曾经这样描…

科研绘图系列:R语言双侧条形图(bar Plot)

介绍 双侧条形图上的每个条形代表一个特定的细菌属,条形的高度表示该属的LDA得分的对数值,颜色用来区分不同的分类群或组别,它具有以下优点: 可视化差异:条形图可以直观地展示不同细菌属在得分上的差异。强调重要性:较高的条形表示某些特征在区分不同组别中具有重要作用…

# Sharding-JDBC从入门到精通(6)-- Sharding-JDBC 水平分库 和 垂直分库。

Sharding-JDBC从入门到精通&#xff08;6&#xff09;-- Sharding-JDBC 水平分库 和 垂直分库。 一、Sharding-JDBC 水平分库-分片策略配置 1、分库策略定义方式如下 # 分库策略&#xff0c;如何将一个逻辑表映射到多个数据源 spring.shardingsphere.sharding.tables.<逻…

第33集《大乘起信论》

《大乘起信论》和尚尼慈悲&#xff0c;诸位法师、诸位居士&#xff0c;阿弥陀佛&#xff01;&#xff08;阿弥陀佛&#xff01;&#xff09;请大家打开《讲义》第七十四页&#xff0c;子二、释观。 本论的特色&#xff0c;一言以蔽之就是文简意赅、辞约理富&#xff0c;就是说…

VUE2拖拽组件:vue-draggable-resizable-gorkys

vue-draggable-resizable-gorkys组件基于vue-draggable-resizable进行二次开发, 用于可调整大小和可拖动元素的组件并支持冲突检测、元素吸附、元素对齐、辅助线 安装: npm install --save vue-draggable-resizable-gorkys 全局引用: import Vue from vue import vdr fro…

嵌入式linux面试1

1. linux 1.1. Window系统和Linux系统的区别 linux区分大小写windows在dos&#xff08;磁盘操作系统&#xff09;界面命令下不区分大小写&#xff1b; 1.2. 文件格式区分 windows用扩展名区分文件&#xff1b;如.exe代表执行文件&#xff0c;.txt代表文本文件&#xff0c;.…

运用Python与Keras框架打造深度学习图像分类应用:详尽步骤与代码实例解析

引言 随着深度学习技术的飞速发展&#xff0c;其在图像识别和分类领域的应用日益广泛。在这一背景下&#xff0c;Python因其丰富的数据科学库和强大的生态系统而成为首选编程语言之一。在本文中&#xff0c;我们将深入探讨如何使用Python和其中的Keras深度学习框架来完成一个实…

手动将dingtalk-sdk-java jar包打入maven本地仓库

有时候,中央镜像库不一定有自己需要的jar包,这时候我们就需要用到该方法,将jar打入maven本地仓库,然后项目中,正常使用maven的引入规则。 mvn install:install-file -Dmaven.repo.local=D:\software\maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\repo -DgroupId=ding…

学习笔记——交通安全分析11

目录 前言 当天学习笔记整理 4信控交叉口交通安全分析 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 #本期内容接上一期10笔记 #最近确实太懒了&#xff0c;接受…

跨越数据边界:域适应在目标检测中的革新作用

标题&#xff1a;跨越数据边界&#xff1a;域适应在目标检测中的革新作用 在机器学习和计算机视觉领域&#xff0c;尤其是目标检测任务中&#xff0c;域适应&#xff08;Domain Adaptation&#xff09;是一种关键技术&#xff0c;它解决了模型在不同数据分布上的泛化问题。当训…

C语言字节对齐技术在嵌入式、网络与操作系统中的应用与优化

第一部分&#xff1a;嵌入式系统中的字节对齐 嵌入式系统通常对性能和资源有着严格的要求。在这些系统中&#xff0c;字节对齐的正确使用可以显著提高数据访问速度&#xff0c;减少内存占用&#xff0c;并提高系统的整体效率。 一、嵌入式系统中的字节对齐挑战 嵌入式系统中…

Caffeinated for Mac v2.0.6 Mac防休眠应用 兼容 M1/M2/M3

Caffeinated 可以防止您的 Mac 进入休眠状态、屏幕变暗或者启动屏幕保护。 应用介绍 您的屏幕是否总是在您不希望的时候变暗&#xff1f;那么Caffeinated就是您解决这个大麻烦的最好工具啦。Caffeinated是在Caffeine这个非常便捷、有用的工具的基础上开发而来的。Caffeinated…

215. 数组中的第K个最大元素(中等)

215. 数组中的第K个最大元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;215. 数组中的第K个最大元素 2.详细题解 快速排序算法在每一轮排序中&#xff0c;随机选择一个数字 x x x&#xff0c;根据与 x x x的大小关系将要排序的数…

PMP–知识卡片--PDCA循环

记忆 PDCA&#xff1a;计划执行检查调整&#xff0c;计划观察动作&#xff1b;plan do check action 定义 PDCA循环的含义是将质量管理分为四个过程&#xff0c;即计划&#xff08;Plan&#xff09;、执行&#xff08;Do&#xff09;、检查&#xff08;Check&#xff09;、处…

C++开发调试工具:GDB调试,windebug调试,adb调试

我们在C开发过程中时常避免不了要调试追踪&#xff0c;一下介绍最主流的三种调试工具&#xff1a; 一.GDB调试 1.coredump文件&#xff1a; coredump文件是程序异常时系统产生的错误日志文件&#xff0c;即核心转储文件&#xff1b; 编译一个debug程序&#xff0c;必须是debu…

使用 OpenCV 和 Python 进行车道检测和物体检测(YOLO)

本项目旨在开发一个集车道检测与物体检测功能于一体的智能视觉分析系统&#xff0c;利用先进的计算机视觉技术和深度学习模型&#xff0c;实现实时的道路场景理解和目标识别。系统主要依托OpenCV这一强大的计算机视觉库&#xff0c;以及Python作为编程语言&#xff0c;融合了车…

MySQL索引教程(01):创建索引

文章目录 MySQL 创建索引索引介绍MySQL CREATE INDEX 语法MySQL 索引类型MySQL CREATE INDEX 实例结论 MySQL 创建索引 对于一个具有大量数据行的表&#xff0c;如果你根据某个查询条件检索数据时很慢&#xff0c;可能是因为你没有在检索条件相关的列上创建索引。 索引类似于…

FPC生产工艺全流程详解

FPC生产制作繁琐而且难度较大&#xff0c;与普通PCB比较&#xff0c;FPC单位面积电路的造价高很多&#xff0c;但是&#xff0c;由于FPC优异的柔性、轻薄和可靠性等特性&#xff0c;给众多领域的设备和产品提供了更广泛的实现空间和新的设计方案&#xff0c;比如沉金板在电子、…

android的activty冷启动和热启动差异是什么?

Android的Activity冷启动和热启动之间存在显著差异&#xff0c;这些差异主要体现在启动过程、资源加载、组件初始化以及用户体验等方面。以下是对两者差异的详细分析&#xff1a; 一、定义与过程差异 冷启动&#xff1a; 定义&#xff1a;冷启动是指应用程序完全退出后&#…

Java需要英语基础吗?

Java编程语言本身并不要求必须有很强的英语基础&#xff0c;因为Java的语法和逻辑是独立于任何特定语言的。我收集归类了一份嵌入式学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&am…