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

Day 16 C++ 友元(friend)

目录

什么是友元(friend)

友元的三种实现

全局函数做友元

类做友元

成员函数做友元


什么是友元(friend)

友元是一种访问控制的机制,它允许一个类或函数访问另一个类的私有成员。通过友元关系,可以在需要时向其他类或函数提供对类的私有成员的访问权限,从而实现灵活的编程设计。

在程序里,私有属性只有类内才能访问,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术,友元的目的就是让一个函数或者类 访问另一个类中私有成员,友元的关键字为 friend

友元的三种实现

全局函数做友元

全局函数可以被声明为类的友元函数,从而获得对类的私有成员的访问权限。在类定义中使用 friend 关键字来声明该函数为友元函数。

friend void functionName(); // 声明友元函数 

class MyClass {
private:int privateData;public:friend void friendFunction(); // 声明友元函数};void friendFunction() {MyClass obj;obj.privateData = 10; // 可以访问私有成员
}

类做友元

一个类可以将另一个类声明为友元类,这意味着被声明为友元的类可以访问声明为友元类的所有私有和保护成员。在类的定义中使用 friend 关键字来声明友元类。

friend class ClassName; // 声明友元类 

class FriendClass {
private:int privateData;public:friend class MyClass; // 声明友元类};class MyClass {
private:int privateData;public:void friendFunc(FriendClass& obj) {obj.privateData = 10; // 可以访问FriendClass的私有成员}
};

成员函数做友元

一个成员函数可以被声明为另一个类的友元函数。在类的定义中使用 friend 关键字来声明成员函数为友元函数。

friend void ClassName::memberFunctionName(); // 声明成员函数为友元函数 

class FriendClass {
private:int privateData;public:friend void MyClass::friendFunc(); // 声明MyClass的成员函数为友元函数};class MyClass {
private:int privateData;public:void friendFunc() {FriendClass obj;obj.privateData = 10; // 可以访问FriendClass的私有成员}
};

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

相关文章:

  • 步进电机1
  • PHP-简单项目引起的大麻烦--【白嫖项目】
  • Excel如何把两列互换
  • Java基础面试题2
  • Typescript 第八章 异步编程,并行和并发(JavaScript事件循环,异步流,多线程类型安全)
  • c++ 打印当前时间(精确到毫秒)
  • mapstruct 错误 java.lang.NoSuchMethodError: Ljava/lang/Double 错误
  • SpringBoot+AOP+Redission实战分布式锁
  • Linux系统---进程概念
  • ELK常用语法和线上问题排查
  • session-cookies 三个缓存 localStorage、sessionStorage、Cookies。
  • LA@行列式性质
  • 【java安全】原生反序列化利用链JDK7u21
  • [SQL智慧航行者] - SQL刷题规划
  • 概率论与数理统计:第一章:随机事件及其概率
  • elementUi重置Select选择器样式、option、deep、vue3、plus
  • jar命令的安装与使用
  • windows系统多线程多进程下应用函数CloseHandle的一些细节
  • 微服务——elasticsearch
  • paddlenlp:社交网络中多模态虚假媒体内容核查
  • Centos系统有哪些特点呢
  • 一文学会git常用命令和使用指南
  • [PyTorch][chapter 46][LSTM -1]
  • 寄存器详解(二)
  • Java AIO
  • java集合总结
  • list交并补差集合
  • 【微信小程序】父组件修改子组件数据或调用子组件方法
  • frp通过nginx映射multipart/x-mixed-replace; boundary=frame流媒体出外网访问
  • Kubernetes概述