C++:一文搞懂友元类(friend class)

news2024/12/24 10:22:28

C++的友元(friend)是个很重要的概念,好些朋友对此却很迷惑,本文将对友元类(friend class)详细讲解,一文搞懂。

友元的特性:

1、使用friend修饰的友元类可以访问本类的私有成员(private)和保护成员(protected)。
2、友元不能传递,简单来说就是:她是我的朋友,他是她的朋友,但他不是我的朋友。

友元实例

大家都知道:正方形(Square)就是长和宽相等的长方形(Rectangle),本例中将以此为例,说明友元类的定义和使用。
源代码,仔细看注释内容:

#include <iostream>

using namespace std;
/**
 * 友元类的定义和使用
*/
class Square; //先声明类,再使用

class Rectangle { //定义长方形类Rectangle
	int height, width;
public:
	int area(){ //计算长方形的面积
		return height*width;
	}
	void convert(const Square& s); //声明成员方法,行尾必须加分号
};
class Square{ //定义正方形类Square
	friend class Rectangle; //声明Rectangle是Square的友元类,从而Rectangle类的对象可以访问Square的私有成员side,反过来不行。
	int side; //side是私有成员(private)
public:
	Square(int x):side(x){}  //完整定义了构造函数重载,所以行尾不用加分号
};
//定义Rectangle的成员方法convert()
void Rectangle::convert(const Square& s){ //参数s是Square类型的对象引用
	height = s.side; //友元关系,所以可以使用s的私有成员side
	width = s.side; //使用s的私有成员side
}
int main(){
	Rectangle rect; //定义一个Rectangle类型的对象rect
	Square sqr(4); //定义一个Square类型的对象sqr
	rect.convert(sqr); //调用rect的convert()方法将sqr正方形转换为等边的长方形
	cout << "Area is:" << rect.area() << endl; //调用长方形的面积函数area()计算面积
	return 0;
}

特别说明

在本例中,Rectangle是Square的友元类:
1、Rectangle类的对象可以访问Square的私有成员side;
2、反过来则不行,即:Square类的对象不能访问Rectangle对象的私有成员。

编译运行

D:\YcjWork\CppTour>gpp c2002

D:\YcjWork\CppTour>g++ c2002.cpp -o c2002.exe

D:\YcjWork\CppTour>c2002
Area is:16

D:\YcjWork\CppTour>

运行截屏

C++:一文搞懂友元类(friend class)

(全文完)

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

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

相关文章

中国电信解锁万亿参数大模型:TeleAI的创新与突破

首个由万卡集群训练出来的万亿参数大模型&#xff0c;已被一家央企解锁。 具体而言&#xff0c;为了推动纯国产人工智能的探索&#xff0c;带来这条新路径的正是中国电信人工智能研究院&#xff08;TeleAI&#xff09;。 该研究院由中国电信集团的CTO、首席科学家兼院长李学龙…

坡印廷矢量(也叫功率流密度,对面积积分就是功率)

坡印廷矢量在静电场&#xff0c;静磁场&#xff0c;恒定电流的电场&#xff0c;和时变电磁场中的表达式不同。 我们看时变电磁场的坡印廷矢量 坡印廷矢量就等于这个&#xff0c;其中的电场和磁场是实数表示的 坡印廷矢量用复数形式的场求 这里的E和H是复数表示的场&#xff0…

电影票接口api对接有哪些优势?

一、业务功能拓展方面的优势 多平台整合可以整合多个影院票务系统&#xff0c;通过一个接口获取众多影院的信息&#xff0c;包括影院、影厅、座位、影片、场次、日期及票价等信息&#xff0c;方便在自己的应用程序中展示这些信息&#xff0c;从而实现电影票的在线预订、支付和…

人工智能价格战——如何降低成本让人工智能更易于普及

十年前&#xff0c;开发人工智能 (AI) 是只有大公司和资金充足的研究机构才能负担得起的事情。必要的硬件、软件和数据存储成本非常高。但从那时起&#xff0c;情况发生了很大变化。一切始于 2012 年的 AlexNet&#xff0c;这是一种深度学习模型&#xff0c;展示了神经网络的真…

微服务jvisualvm解析部署使用全流程

1、介绍 VisualVM 是Netbeans的profile 2、启动 进入正在使用的jdk下bin目录&#xff0c;运行jvisualvm.exe。 3、选中要监控的线程 4、安装gc插件 5、插件安装报错 VisualVM: Plugins Centers 访问这个地址&#xff0c;找到对应版本再配置 https://visualvm.github.io/uc/…

【CKA】六、四层负载-Service应用

6、四层负载-Service应用 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 1、编辑front-end的deploy服务&#xff0c;添加端口信息 2、暴露svc端口 3. 官网地址&#xff1a; https://kubernetes.io/zh-cn/docs/tutorials/services/connect-applications-service/#the-ku…

nominatim部署OSM离线地图

第一步&#xff1a;准备一个大内存的服务器&#xff0c;磁盘PG大小根据实际导入的数据确定&#xff0c;全量数据1T&#xff0c;osm.pdf属于压缩文件&#xff0c;如果能下载&#xff0c;但下载很慢&#xff0c;可以尝试用迅雷下载。 osm.pdf下载 osm.pdf另外一个下载路径 全量数…

学生党有福了!国内最好的4款AI论文润色机构

在当今学术研究和写作领域&#xff0c;AI技术的应用已经变得越来越普遍。AI论文润色工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。这些工具极大地提高了写作效率和质量&#xff0c;尤其对于学生党来说&#xff0c;选择合适的AI论…

基于单片机多功能称重系统设计

** 文章目录 前言概要功能设计设计思路 软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…

2024年3分钟手把手教你激活Guitar Pro 8破解版

Guitar Pro是一款专业的吉他制谱软件&#xff0c;现在已更新至Guitar Pro8&#xff0c;新增了支持添加音频轨道、支持嵌套连音符、直观的效果器视图、让指法一目了然的音阶示意图等实用新功能。下面我们来看Guitar Pro8 Windows如何安装激活。 GuitarPro8安装包和许可证密钥夸克…

Acwing 高斯消元

高斯消元能在 O ( n 3 ) O(n^3) O(n3)的时间复杂度内求解n个方程&#xff0c;n个未知数的多元线性方程组&#xff0c;即 a 11 x 1 a 12 x 2 a 13 x 3 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 a 23 x 3 ⋯ a 2 n x n b 2 … a n 1 x 1 a n 2 x 2 a n 3 x 3 ⋯ a n n…

STM32CubeMX工程printf问题

1、不能打印输出的问题 利用STM32CubeMX创建了一个带FreeRTOS系统的工程&#xff0c;使能多线程保护。 然后在任务函数中调用了printf函数。 可是电脑的串口上没有信息输出&#xff0c;程序进入了硬件错误中断。 原来是因为自动生成的串口初始化函数MX_LPUART1_UART_Init中&a…

话术挂断之后是否处理事件

文章目录 前言联系我们解决方案方案一方案二 前言 流程&#xff1a;自动外呼进入机器人话术。问题&#xff1a;在机器人放音时用户挂断后&#xff0c;话术还会继续匹配流程&#xff0c;如果匹配上的是放音节点&#xff0c;还会进行放音&#xff0c;那么在数据库表conversation…

利用vue-capper封装一个可以函数式调用图片裁剪组件

1. 效果 const cropData await wqCrop({prop:{img,autoCrop: true, // 是否开启截图框maxImgSize: 600,autoCropWidth: 30,canMove: true, // 图片是否可移动canMoveBox: true, // 截图框是否可移动fixedBox: false, // 截图框是否固定}});console.log(cropData);使用wqCrop会…

阿里大模型算法岗面试,上来就手撕代码啊

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

Python | Leetcode Python题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; class Solution:def getSteps(self, cur: int, n: int) -> int:steps, first, last 0, cur, curwhile first < n:steps min(last, n) - first 1first * 10last last * 10 9return stepsdef findKthNumber(self, n: int, k: int)…

2022年6月 Frontier 获得性能第一的论文翻译

为百万兆级加速架构做高性能 Linpack 优化 摘要 我们详细叙述了在 rocHPL 中做的性能优化&#xff0c;rocHPL 是 AMD 对 HPL 基准的开源实现&#xff0c;主要是针对节点进行优化的架构&#xff0c;是为百万兆级系统而设计的&#xff0c;比如&#xff1a;Frontier suppercomput…

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键

蓝桥杯【物联网】零基础到国奖之路:十六. 扩展模块之矩阵按键 第一节 硬件解读第二节 CubeMX配置第三节 MDK代码 第一节 硬件解读 扩展模块和ADC模块是一摸一样的&#xff0c;插在主板上。 引脚对应关系&#xff1a; PB6-ROW1 PB7-ROW2 PB1-COLUMN1 PB0-COLUMN2 PA8-COLUMN3 …

上位机图像处理和嵌入式模块部署(软硬结合才是嵌入式的精髓)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 关于嵌入式&#xff0c;有很多的说法。有的认为stm32 mcu那种才是嵌入式&#xff1b;有的认为嵌入式linux也是嵌入式&#xff1b;也有的同学认为&a…

比较10大热门低代码开发平台及其适用性

本文介绍10款主流低代码开发平台&#xff0c;包括ZohoCreator、OutSystems、Mendix等&#xff0c;它们各具特色&#xff0c;如定制能力强、集成方便、全栈开发等&#xff0c;适合不同企业快速构建应用程序&#xff0c;提升开发效率。 一、Zoho Creator Zoho Creator低代码开发…