当前位置: 首页 > news >正文

C++ 友元

文章目录

  • 前言
  • 一、什么是友元
  • 二、友元的特性
  • 三、示例代码
  • 总结

前言

在C++编程中,友元(friend)是一种特殊的关系,允许一个类或函数访问另一个类中的私有成员。


一、什么是友元

1.友元 的定义:

友元在C++中可以被用于类和函数。对于类来说,可以创建一个友元类或友元函数。友元类可以 直接访问其它类的私有成员 ,而友元函数可以访问某一个类的私有成员。

2.友元 的声明:

在类定义中,可以使用 friend 关键字声明一个类或函数为友元。声明通常放在类的访问说明符(public、private、protected)之间。

友元 关系发生在函数与类之间 或者 类与类 之间。

class MyClass {
private:int privateData;
public:friend class FriendClass; // 友元类声明friend void FriendFunction(); // 友元函数声明
};

二、友元的特性

1.局限性

友元的使用应该谨慎,并且遵循信息隐藏的原则。友元的目的是提供更灵活的访问权限,但也可能破坏封装性和安全性。应该尽量避免滥用友元,只在必要的情况下使用。

2.友元 关系的传递性

友元 关系不能传递,友元 关系 是单向的。 即使一个类 A 是类 B 的友元,类 B 的友元类不会自动成为类 A 的友元。
如果 A 是 B 的友元, B 是 C 的友元,则 C 不是 A 的友元,不可以传递使用。
在这里插入图片描述

三、示例代码

  1. 示例一:
    友元函数允许函数访问类中的私有成员。被声明为友元的函数可以直接访问友元类的私有成员。
class Point
{int a, b;						// a,b 是类的私有成员
public:Point(int a, int b){this->a = a;this->b = b;}friend void fun(Point&p);			//声明 友元 函数
};void fun(Point& p)
{printf("a = %d, b = %d\n",p.a,p.b);			//在 fun 函数内可直接访问 类的私有成员
}int main(void)
{Point p(1,2);fun(p);return 0;
}

在这里插入图片描述

  1. 示例 二
    友元类允许一个类访问另一个类中的私有成员。被声明为友元的类可以直接访问友元类的私有成员。
class name1
{const char* n;
public:name1(const char* n){this->n = n;}friend class name2;				// 声明 友元 类
};class name2
{
public:void GetName1(name1& name)				// 打印 name1 类的名字{printf("name1 ==> %s\n", name.n);		// 访问 私有成员}
};int main(void)
{name1 n1("hello");name2 n2;n2.GetName1(n1);return 0;
}

在这里插入图片描述


总结

友元是一个强大的特性,但应谨慎使用。正确理解和使用友元关系,可以在需要的时候提供更灵活的访问权限,同时保持良好的封装性和安全性。在设计类和函数时,考虑友元是否需要,并仔细评估其对程序结构的影响。

相关文章:

C++ 友元

文章目录 前言一、什么是友元二、友元的特性三、示例代码总结 前言 在C编程中,友元(friend)是一种特殊的关系,允许一个类或函数访问另一个类中的私有成员。 一、什么是友元 1.友元 的定义: 友元在C中可以被用于类和…...

Vulkan 绘制显示设计

背景 众所周知,Vulkan是个跨平台的图形渲染API,为了友好地支持跨平台,Vulkan自然也抽象出了很多接口层去对接各个操作系统,抹平系统间的差异,Swap Chains即为WSI。 其本质上是一种图像队列,此队列会按顺序…...

Linux性能分析工具介绍(一)--cpu及功耗相关工具介绍

目录 一、引言 二、CPU及功耗分析工具介绍 ------>2.1、cpuinfo ------------>2.1.1、cpuid指令 ------>2.2、lscpu ------>2.3、turbostat ------>2.4、rdmsr ------>2.5、mpstat ------>2.6、/proc/stat ------>2.7、powertop ----------…...

智能财务分析的无冕之王-奥威BI数据可视化工具

利用智能数据可视化分析工具,可极大提升财务分析效率和报表可读性,缩短从分析到决策的耗时。但财务分析的难度往往比其他分析更高,因为它的分析指标计算组合变化太多也太快。哪些数据可视化工具能胜任智能财务数据分析? 奥威BI数…...

.NET 应用程序 部署

**硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 DTU902 产品详情 G5501 产品详情 本文内容 在设备上部署 dotnet应用,与任何其他平台的部署相同,可以2种方式: 依赖于框…...

Linux CentOS安装NVIDIA GPU驱动程序和NVIDIA CUDA工具包

要在CentOS上安装NVIDIA驱动程序和NVIDIA CUDA工具包,您可以按照以下步骤进行操作: 1. 准备工作: 确保您的系统具有兼容的NVIDIA GPU。您可以在NVIDIA官方网站上查找支持CUDA的GPU型号列表。如果您之前已经安装了Nouveau驱动程序并禁用了它…...

剑指Offer13.机器人的运动范围 C++

1、题目描述 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的…...

List、Map、Set打印

List List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。 普通[1,2] 1.循环 2.System.out.println(list); int数组[1,2,3,4,5,6,1,2,3] 1.for (int[] array : list)…...

软件机器人在渔业船员证书核发中自动化二次审批制证,提高效率和准确性

近年来,随着科技的不断进步,自动化软件机器人在各个领域得到了广泛应用。在渔业船员证书核发事项中,传统的审批和制证流程相对繁琐。博为小帮软件机器人可以让这一流程变得更加高效和准确。 在过去,渔业船员证书核发事项需要在省级…...

Godot4 C# vscode开发环境搭建

用vscode搭建Godot4 C# 开发环境搭建 软件Godot配置vscode配置结果参考 软件 Godot .Net版本: 下载链接vscode :自行下载.netcore7:.netcore6可能也行vscode插件: Godot配置 1.配置文件用VSCode打开 2.生成C#项目 项目–>工具–>C#->Creat…...

nginx简介与安装配置,目录结构和配置文件介绍

一.nginx简介 1.简介 2.特性 二.nginx安装 1.rpm包方式 (1)下载扩展源 (2)安装扩展rpm包,nginx -V查看配置参数,后面源码安装时要用到 2.源码方式 (1)建议提前下好所需要的部…...

CTF流量题解http4.pcapng

流量分析 导出http 打开报错 验证文件头,发现是zip。 图常片见里文可件能的包16含进:压制缩头包部,word,pdf JPG FF D8 FF E0/FF D8 FF E1 PNG 89 50 4E 47 GIF 47 49 46 38 ZIP 50 4B 03 04 RAR 52 61 72 21 MP3 49 44 33 0 改后缀 使用工具爆破。 git clone git…...

旷视科技AIoT软硬一体化走向深处,生态和大模型成为“两翼”?

齐奏AI交响曲的当下,赛道玩家各自精彩。其中,被称作AI四小龙的商汤科技、云从科技、依图科技、旷视科技已成长为业内标杆,并积极追赶新浪潮。无论是涌向二级市场还是布局最新风口大模型,AI四小龙谁都不甘其后。 以深耕AIoT软硬一…...

STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

今日继续学习使用 STM32 F103C8T6开发板 点亮一个LED灯,文章提供源码,测试工程,实验效果图,希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 : 引脚安排整理: 定时器的引脚例举: …...

数组相关练习

数组练习 将数组转化成字符串数组拷贝求数组元素的平均值查找数组中指定元素(顺序查找)二分查找冒泡排序数组逆序 将数组转化成字符串 import java.util.Arrays;public class Text1 {public static void main(String[] args) {int[] arr {5, 6, 4, 2};System.out.println(Arr…...

Leetcode-每日一题【剑指 Offer 11. 旋转数组的最小数字】

题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4…...

git教程(第一次使用)

一、gitee和github区别 二、git使用 下载地址 windows:https://gitforwindows.org/ mac:http://sourceforge.net/projects/git-osx-installer/ 1.git初次运行前的配置 (1)配置用户信息 git config --global user.name "…...

Autoware.ai1.14.0自动驾驶-Demo运行

Autoware.ai1.14.0自动驾驶-Demo运行 数据准备 下载数据: wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_data.tar.gz wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_150324.tar.gz一定要注意解压文件是在.auto…...

AttributeConverter

AttributeConverter 是 JPA 中的一个接口,,用于实体属性和 数据库字段,,之间的转换,,,类似mybatis中的typeHandler AttributeConverter使用 定义一个类实现AttributeConverter接口&#xff0c…...

【逗老师的PMP学习笔记】8、项目质量管理

目录 一、规划质量管理1、质量管理的发展历史2、戴明环,PDCA理论3、【关键输入】事业环境因素4、【关键输入】成本效益分析5、【关键工具】质量成本6、【关键输出】质量管理计划7、插一嘴,项目的三个标准8、【关键工具】质量测量指标 二、管理质量1、【关…...

PPTXjs:如何在浏览器中免费预览PPTX文件的完整指南

PPTXjs:如何在浏览器中免费预览PPTX文件的完整指南 【免费下载链接】PPTXjs jquery plugin for convertation pptx to html 项目地址: https://gitcode.com/gh_mirrors/pp/PPTXjs 还在为PPT演示文稿的跨平台兼容性而烦恼吗?PPTXjs是一个革命性的…...

观察不同模型在Taotoken平台上的实际响应速度与效果差异

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察不同模型在Taotoken平台上的实际响应速度与效果差异 在开发与创作过程中,我们常常需要调用大模型API来完成文本生成…...

RELION 5.0完整指南:从零开始掌握冷冻电镜数据处理利器

RELION 5.0完整指南:从零开始掌握冷冻电镜数据处理利器 【免费下载链接】relion Image-processing software for cryo-electron microscopy 项目地址: https://gitcode.com/gh_mirrors/re/relion RELION 5.0(REgularised LIkelihood OptimisatioN…...

从源码到实战:手把手教你自定义一个比StringUtils更强大的Java数字校验工具类

从源码到实战:构建超越StringUtils的Java数字校验工具类 在Java开发中,数字校验是每个开发者都会遇到的常见需求。虽然Apache Commons Lang的StringUtils提供了基础的isNumeric方法,但在实际业务场景中,我们经常需要处理更复杂的…...

如何从视频中智能提取PPT内容:3步完成自动化内容转换

如何从视频中智能提取PPT内容:3步完成自动化内容转换 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经花费数小时观看会议录像或教学视频,只为手动截…...

米家极客版常用快捷键

米家极客版常用快捷键 双击放大/缩小卡片...

嵌入式开发者的串口工具选择题:minicom vs microcom,谁更适合你的Linux板卡?

嵌入式Linux串口工具深度对比:minicom与microcom的实战选型指南 在嵌入式Linux开发中,串口调试如同工程师的"听诊器",是连接开发者与硬件设备的重要桥梁。面对资源受限的嵌入式环境,选择一款合适的串口工具往往能事半功…...

《CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略》004、DEIM数学基础:注意力机制与特征重标定的统一框架

CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略 004、DEIM数学基础:注意力机制与特征重标定的统一框架 一、从一次诡异的梯度爆炸说起 去年秋天调一个轻量级检测模型,在T4上跑得好好的,换到Jetson Orin上就炸了——loss直接飞到NaN。查了三天,最后定…...

手把手教你给Ubuntu 22.04的Intel蓝牙‘补丁’:ibt-1040-1050固件缺失的保姆级修复指南

深度修复Ubuntu 22.04中Intel蓝牙固件缺失问题:从原理到实践的全方位指南 在Linux系统中,硬件设备的正常运行往往依赖于对应的固件支持。对于使用Intel AX200/AX201等无线网卡的用户来说,蓝牙功能突然失效是一个常见但令人困扰的问题。本文将…...

实时商业情报不再滞后,Perplexity新闻搜索配置全拆解,从入门到日均处理200+信源

更多请点击: https://codechina.net 第一章:实时商业情报不再滞后,Perplexity新闻搜索配置全拆解,从入门到日均处理200信源 为什么传统RSS与Google Alerts已失效 现代商业情报对时效性、语义准确性与信源可信度提出更高要求。Pe…...