【C++基础】友元

news2025/1/12 8:57:23

友元

  • 定义:类的特点是私有成员无法在作用域外访问,而友元函数是特权函数,允许访问私有成员。

  • 语法:在函数或类前加friend。

  • 例子:在message中,published每个人都可访问,secret只有自己可以访问。但有时也需要秘密接头人访问secret。

  • 注意事项:

    1.友元关系不能被继承。

    2.友元关系是单向的,类A是类B的朋友,但类B不一定是类A的朋友。

    3.友元关系不具有传递性。类B是类A的朋友,类C是类B的朋友,但类C不一定是类A的朋友

14.1 普通成员函数作为类的友元

#include<iostream>
using namespace std;
class message {
private:
     string secret;
public:
     string published;
public:
     message(string _secret, string _published) {
          secret = _secret;
          published = _published;
     }
private:
     friend void visiting(message &m) {
          cout <<"secret: "<< m.secret << endl;
          cout << "published: " << m.published << endl;
     }
};
int main()
{
     message paper("aaa","bbb");
     visiting(paper);
}

 

14.2 类的成员函数作为另一类的友元

#include<iostream>
using namespace std;
class massege; //需要引用的类要在前面声明
class spy {
public:
     void visiting_1(massege& paper);//不做为友元
     void visiting_2(massege& paper);//做为友元
};
class massege {
public:
     string publishing;
private:
     string secret;
public:
     massege(string _publishing, string _secret) {
          publishing = _publishing;
          secret = _secret;
     }
private:
     friend void spy::visiting_2(massege &paper);
};
​
void spy::visiting_1(massege& paper) {
     cout << "visiting_1 publishing:" << paper.publishing << endl;
     cout << "visiting_1 can't visit secret!" << endl;
}
​
void spy::visiting_2(massege& paper) {
     cout << "visiting_2 publishing:" << paper.publishing << endl;
     cout << "visiting_2 secret:" << paper.secret << endl;
}
​
int main()
{
     massege paper("ppppp","sssss");
     spy YY;
     YY.visiting_1(paper);
     YY.visiting_2(paper);
}

 

14.3 整个类作为另一个类的友元

#include<iostream>
using namespace std;
class massege; //需要引用的类要在前面声明
class spy {
public:
     void visiting_1(massege& paper);//不做为友元
     void visiting_2(massege& paper);//做为友元
};
class massege {
public:
     string publishing;
private:
     string secret;
public:
     massege(string _publishing, string _secret) {
          publishing = _publishing;
          secret = _secret;
     }
private:
     friend spy;
};
​
void spy::visiting_1(massege& paper) {
     cout << "visiting_1 publishing:" << paper.publishing << endl;
     cout << "visiting_2 secret:" << paper.secret << endl;
}
​
void spy::visiting_2(massege& paper) {
     cout << "visiting_2 publishing:" << paper.publishing << endl;
     cout << "visiting_2 secret:" << paper.secret << endl;
}
​
int main()
{
     massege paper("ppppp","sssss");
     spy YY;
     YY.visiting_1(paper);
     YY.visiting_2(paper);
}

 

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

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

相关文章

开放经济中的货币-中国视角下的宏观经济

开放经济中的货币 – 潘登同学的宏观经济学笔记 文章目录开放经济中的货币 -- 潘登同学的宏观经济学笔记汇率&#xff1a;复习外汇冲销下的可能三角中国的811汇改国际货币体系的现在与未来当前国际货币体系存在三个主要问题体系具有内生不稳定性美元的中心地位带来了不平等非对…

[附源码]java毕业设计校园博客系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

树莓派快速上手-远程调试图形界面

0 简述 前面的文章里介绍过通过ssh在局域网或者远程访问树莓派&#xff0c;一般而言&#xff0c;对于非图形界面的开发仅通过ssh命令行交互就能够完成的&#xff0c;但是要开发图形界面展示或交互的应用时&#xff0c;光命令行交互的方式就远远不够了。这篇文章将针对树莓派这…

Conformer测试问题

https://github.com/pengzhiliang/Conformer 抽空测试了conformer&#xff0c;训练起来很简单&#xff0c;但是会遇到一个问题&#xff1a; Loss is nan, stopping training 我用的默认配置&#xff0c;不知道为什么会有这个问题&#xff0c;知道的来探讨下。 1.数据准备 我…

华为机试 - 最长连续子序列

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 有N个正整数组成的一个序列。给定整数sum&#xff0c;求长度最长的连续子序列&#xff0c;使他们的和等于sum&#xff0c;返回此子序列的长度&#xff0c; 如果没有满足要求的序列&#xff0c;返回-1…

【Hack The Box】Linux练习-- Mirai

HTB 学习笔记 【Hack The Box】Linux练习-- Mirai &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#x1f36…

元宇宙技术在几年后质变,迎来体验终端世界

京东集团高级副总裁、京东探索研究院院长陶大程京东集团高级副总裁、京东探索研究院院长陶大程是京东“产业元宇宙”的提出者和构建者。他谈到&#xff0c;希望通过构建元宇宙供应链降低实体经济参与数字经济的门槛&#xff0c;帮助实体经济完成数实融合的商业转型&#xff0c;…

设计模式复习题

1.选择题 1&#xff0e;在观察者模式中&#xff0c;表述错误的是(C )C.观察者可以改变被观察者的状态&#xff0c;再由被观察者通知所有观察者依据被观察者的状态进行。 2&#xff0e;对于违反里式代换原则的两个类&#xff0c;可以采用的候选解决方案错误的是: ( D )D.以上方…

斗鱼发布Q3财报:连续三个季度收入下滑,市值年初至今缩水五成

11月21日&#xff0c;斗鱼&#xff08;NASDAQ:DOYU&#xff09;发布2022年第三季度财务报告。 财报显示&#xff0c;斗鱼2022年第三季度的营收为17.98亿元&#xff0c;同比减少23.4%&#xff1b;净亏损660万元&#xff0c;2021年同期为亏损1.435亿元&#xff1b;调整后净利润为…

面向对象编程·上

面向对象编程上1.包1.1导入包中的类1.2静态导入1.3将类放到包中1.4包的访问权限控制 - [只能在当前包当中使用]1.5常见的系统包2.继承2.1背景2.2语法规则2.2.1super[不能出现在静态方法当中]作用总结 父类对象的引用2.3protected 关键字2.4更复杂的继承关系2.5final 关键字2.6组…

电容笔和触控笔有什么区别?值得入手电容笔品牌推荐

电容笔与传统的触控笔最大的不同之处是&#xff0c;电容笔具有良好的防误触和倾斜压感&#xff0c;能有效地降低书写过程中的麻烦。如果我们想要 IPAD和电容笔一起很好地使用&#xff0c;而且我们就没有过多的预算的话。那么&#xff0c;这款平替电容笔&#xff0c;就是最好的选…

看懂这篇文章-你就懂了数据库死锁产生的场景和解决方法

一、什么是死锁 加锁&#xff08;Locking&#xff09;是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据&#xff0c;读取数据的事务通常只需要获得读锁&#xff08;共享锁&#xff09;&#xff0c;修改数据的事务需要获得…

京东神灯文档:JVM参数GC线程数ParallelGCThreads合理性设置

目录 1. ParallelGCThreads参数含义 2. ParallelGCThreads参数设置 3. ParallelGCThreads参数实验 4. ParallelGCThreads扫描结果 5. ParallelGCThreads修改建议 1. ParallelGCThreads参数含义 在讲这个参数之前&#xff0c;先谈谈JVM垃圾回收(GC)算法的两个优化标的&…

ERP (SAP) Integrator Delphi Edition

ERP (SAP) Integrator Delphi Edition ERP(SAP)Integrator支持RFC和SAP服务&#xff0c;并允许开发人员轻松编写桌面、服务器和移动应用程序。它提供了一种连接到SAP R/3和NetWeaver系统的简单方法&#xff0c;并使应用程序能够进行远程功能调用&#xff0c;以便向这些远程功能…

SQL Server 卸载和安装

在莫不知名链接下载sql失败了&#xff0c;然就几天变化&#xff0c;让我从sql Server2019到2022了&#xff0c; 首先讲一下卸载吧&#xff0c;很简单一共就5步&#xff0c; 先停止服务&#xff0c;有关sql server的相关服务全部停止&#xff0c;再进入控制面板 > 卸载程序…

解决:Uncaught (in promise) TypeError: Failed to fetch 的问题

1、问题展示&#xff1a; 其一、报错的代码信息为&#xff1a; Access to fetch at .......... from origin ................. has been blocked by CORS policy: Response to preflight request doesnt pass access control check: Redirect is not allowed for a preflight…

HashSet和HashMap

目录 一、HashSet 1、HashSet简单介绍 2、HashSet的常用方法 3、HashSet保证元素不重复的原理 二、HashMap 1、HashMap简单介绍 2、HashMet的常用方法 3、使用LinkedHashMap集合保证元素添加顺序 三、HashSet和HashMap的区别和联系 1、区别 2、联系 一、HashSet 1、Has…

Web3 入门教程 1 —— 认知篇

如果你也喜欢Web3&#xff0c;希望在这做些有趣的、有意义的事情&#xff0c;那么我希望这篇文章可以帮助到你。 其实在很早之前&#xff0c;我就计划写一篇《Web3 新手教程》&#xff0c;送给想要进入 Web3 或者刚刚进入 Web3 的小伙伴&#xff0c;但是考虑到两点原因&#xf…

力扣 53. 最大子数组和 --- C语言求解

题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 题解&#xff1a; 此题可以用动态规划和分治法。 方法1. 动态…

《深度学习进阶 自然语言处理》第七章:seq2seq介绍

文章目录7.1 seq2seq模型介绍7.1.1 seq2seq的原理7.1.2 时序数据转换简单举例7.2 seq2seq模型实现7.3 seq2seq模型改进7.3.1 反转输入数据(Reverse)7.3.2 偷窥(Peeky)7.4 seq2seq模型的应用7.5 总结之前文章链接&#xff1a; 开篇介绍&#xff1a;《深度学习进阶 自然语言处理…