首页 > 编程语言 >c++ primer plus 第15章友,异常和其他:15.1.3 其他友元关系

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

时间:2024-07-05 12:57:07浏览次数:25  
标签:友元 15.1 15 Tv void sync Analyzer Remote

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 是一种类型。

标签:友元,15.1,15,Tv,void,sync,Analyzer,Remote
From: https://blog.csdn.net/zhyjhacker/article/details/140205420

相关文章

  • 代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、
    今天来处理二叉树part1、2、3,顶级享受,一次到位。完全二叉树和满二叉树概念没问题。二叉搜索树,左子树所有结点的值小于它的根结点的值,右子树上所有结点的值大于它的根结点的值平衡二叉搜索树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1。二叉树的存储方式:链式存储......
  • SP15620 POSTERIN - Postering 题解
    题目传送门前置知识单调栈解法容易有每个建筑物的宽度对答案没有影响,故可以将其宽度均看作\(1\)。在最优策略下,对于每张海报,其高度一定等于所覆盖的楼的最小高度。单调栈维护最小高度,记录额外海报数量(与先前高度相等时可以少用一张海报)。最终,用总张数\(n\)减去额外海报......
  • 【ESP32】打造全网最强esp-idf基础教程——15.WiFi连接STA模式
    WiFi连接STA模式一、ESP32的WiFi功能介绍    前面章节内容,基本上都是描述了ESP32强大的MCU能力,这些MCU能力使得ESP32可以替换许多类型的单片机工作,而自己承担这部分功能;当然ESP32的IOT能力才是它的主业,从硬件配置来看,ESP32支持2.4GHz频段WiFi+BT(LE)4.2,而esp-idf对WiFi......
  • 代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之
    454题拆成两块各自匹配化成两个O(n^2)运算1classSolution{2public:3intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){4//四个数组拆分成两块两块5unordered_ma......
  • 代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串
    151以前写过很呆的写法但能用嘿1classSolution{2public:3stringreverseWords(strings){4//初始化变量5vector<vector<int>>data;//存储单词的起始地址和长度6stringans;//最终结果字符串7intnum=0;......
  • 【适用于各种工业应用】IMLT65R050M2H IMLT65R040M2H IMLT65R015M2H IMLT65R060M2H Co
    摘要CoolSiC™650VG2MOSFET可通过降低能耗来充分利用碳化硅的性能,从而在功率转换过程中实现更高效率。这些CoolSiC650VG2MOSFET适用于各种功率半导体应用,如光伏、能量存储、电动汽车直流充电、电机驱动器和工业电源。配备CoolSiCG2的电动汽车用直流快速充电站与前几代产品......
  • VMware vSphere Tanzu部署_15_TKG Cluster获取永不过期Token
    TKGCluster获取永不过期Token登录TKC集群$kubectlvspherelogin--server=192.168.203.194\--tanzu-kubernetes-cluster-nametkc-dev-cluster\--tanzu-kubernetes-cluster-namespacetkc-01\--vsphere-usernameadministrator@vsphere.local\--insecure-skip-tls-v......
  • CF915F Imbalance Value of a Tree
    达到今日更新量题目让我们求所有简单路径上最大值减去最小值的总和实际上就是所有简单路径的最大值总和减去所有简单路径上最小值总和然后分别求所以简单路径的极值,下面以最大值为例:我刚开始想到了非常SB的做法:枚举最大值x,设比x大的数为y,实际上有很多y,如果y是x的祖先,那么点对......
  • 第15届蓝桥杯Python青少组选拔赛(STEMA)2023年8月真题-附答案
    第15届蓝桥杯Python青少组选拔赛(STEMA)2023年8月真题题目总数:11总分数:400真题下载点我百度网盘......
  • 小白个人向[攻防世界]wtf.sh-150( 需要Shell脚本知识 )
    wtf.sh-150(需要Shell脚本知识)注册---->登录---->是一个论坛----->我们也发文章(如上图)发现http://61.147.171.105:56056/post.wtf?post=HYBRM#,post参数好像可以修改,尝试路径穿越学习链接:https://zhuanlan.zhihu.com/p/593376086拿到网页源码网页搜索flag看到cookie和use......