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

什么是C++中的友元函数和友元类?

友元函数(Friend Function)和 友元类(Friend Class)是用于控制类的访问权限的机制。这允许特定的函数或类访问另一个类的私有成员和保护成员,打破了 C++ 的封装性规则。

友元函数

定义

友元提供了不同类的成员函数之间,类的成员函数一般函数之间进行数据共享的机制。通过友元,一个普通函数或者另一个类中的成员函数可以访问类中的私有成员和保护成员。友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。一个函数可以是多个类的友元函数,但是每个类中都要声明这个函数。

#include<iostream>
using namespace std;
class A
{
public:friend void set_show(int x, A& a);//该函数是友元函数的声明
private:int data;
};void set_show(int x, A& a)
{a.data = x;cout << a.data << endl;
}
int main()
{class A a;set_show(1,a);return 0;
}//结果为: 1

使用友元函数注意:

 1.友元函数并不是该类的成员函数,因此它不具有this指针。

友元类

定义

友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。但是另一个类里面也要相应的进行声明

#include<iostream>
using namespace std;
class A
{
public:friend class C; //友元类声明
private:int data;
};class C
{
public:void set_show(int x, A& a){a.data = x;cout << a.data << endl;}
};int main()
{class A a;class C c;c.set_show(1,a);return 0;
}
//结果为:  1

使用友元类时注意:

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

2.友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有响应的声明

3.友元关系不具有传递性。若类B是类A的友元,类C是类B的友元,类C不一定是类A的友元,同样要看类中是否有响应的声明。

http://www.lryc.cn/news/487141.html

相关文章:

  • 基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
  • Inpaint-Web:纯浏览器端实现的开源图像处理工具
  • 商业物联网详细指南:优势与挑战
  • 如何在项目中用elementui实现分页器功能
  • Nginx参数配置-笔记
  • 衡量神经网络表征相似度
  • Javascript高级:深度解析与多种实现方式数组扁平化
  • SpringBoot Data Redis连接Redis-Cluster集群
  • 计算机网络——TCP篇
  • 【网络安全面经】技术性问题3
  • 前后端交互之动态列
  • 递归(3)----力扣40组合数2,力扣473火柴拼正方形
  • 十一:HTTP 状态码详解:解读每一个响应背后的意义
  • 《译文》2024年11月数维杯国际大学生数学建模挑战赛题目
  • shell命令统计文件行数之和
  • 第02章 CentOS基本操作
  • 241113.学习日志——[CSDIY] [ByteDance] 后端训练营 [02]
  • 【HOT100第三天】和为K的子数组,最大子数组和,合并区间,轮转数组
  • 设计模式-Adapter(适配器模式)GO语言版本
  • SAM_Med2D 训练完成后boxes_prompt没有生成mask的问题
  • 游戏引擎学习第18天
  • Kotlin return与return@forEachIndexed
  • 基于Canny边缘检测和轮廓检测
  • 力扣题目解析--合并k个升序链表
  • Linux:调试器-gdb/cgdb
  • 『VUE』30. 生命周期的介绍(详细图文注释)
  • Python 人脸检测:使用 Dlib 和 OpenCV
  • 【大数据学习 | flume】flume的概述与组件的介绍
  • torch.is_storage()
  • 2411rust,编译时自动检查配置