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

友元函数和友元类

友元

友元是 C++ 提供的一种 打破封装 的机制,允许 友元函数 或 友元类 访问某个类的 非公有成员(private/protected)

友元函数

友元函数 可以 直接访问 类的所有 成员,它是 定义在类外部 普通函数 ,不属于任何类,但需要在类的内部声明,声明时需要加friend 关键字。

运算符重载(<<>>

class Student {
private:std::string name;int age;public:Student(std::string n, int a) : name(n), age(a) {}// 声明友元函数(用于 operator<<)friend std::ostream& operator<<(std::ostream& os, const Student& s);
};// 定义 operator<<(可以访问私有成员)
std::ostream& operator<<(std::ostream& os, const Student& s) {os << "Name: " << s.name << ", Age: " << s.age;return os;
}int main() {Student s("Alice", 20);std::cout << s << std::endl;  // 输出:Name: Alice, Age: 20return 0;
}

假设<<重载为成员函数,那 对象就是第一个参数,cout是第二个参数,使用时就是a << cout

同理,如果>>重载成成员函数,那使用时就是 a >> cin,所以<<和>>不能重载成成员函数

重载为全局函数,那第一个参数就可以设置为cout和cin了,使用时就是cout<<a和 cin>>a,这就对味了,并设置友元函数使其可以直接访问非公有成员

友元类

友元类的所有成员函数都是另一个类的友元函数,友元类的所有成员函数都可以访问另一个类中的非公有成员。
1.友元关系是单向的,不具有交换性。
比如上述Time 类和 Date 类,在 Time 类中声明 Date 类为其友元类,那么可以在 Date 类的成员函数中可以直接访问 Time 类的私有成员变量,但想在Time 类中访问 Date 类中私有的成员变量则不行。
2.友元关系不能传递
如果 B A 的友元, C B 的友元,则不能说明 C A 的友元。
3.友元关系不能继承

内部类

如果一个类定义在另一个类的内部,这个类就叫做内部类
注意 内部类是外部类的友元类
特性:
1. 内部类可以定义在外部类的 public protected private 都是可以的。
2. sizeof( 外部类 )= 外部类,和内部类没有任何关系。
http://www.xdnf.cn/news/258697.html

相关文章:

  • 【学习笔记】深入理解Java虚拟机学习笔记——第1章 走进Java
  • 4.1 模块概述
  • JavaScript基础-逻辑运算符
  • 【质量管理】现代TRIZ问题识别中的功能分析——组件分析
  • 网站怎样备份网站,备份网站数据的方法
  • 正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真
  • re题(52)BUUCTF-[FlareOn5]Minesweeper Championship Registration
  • 深度理解linux系统—— 进程优先级
  • 深入理解C++构造函数:从入门到实践
  • AXI中的burst有几种?都用在什么场景中
  • 复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL)
  • HTML5+JavaScript实现连连看游戏之二
  • [预备知识]6. 优化理论(二)
  • Codeforces Round 1022 (Div. 2) A ~ C
  • 【AI面试准备】数据治理与GDPR脱敏机制构建
  • 一键暂停Windows更新工具
  • 数字智慧方案6186丨智慧应急指挥解决方案(43页PPT)(文末有下载方式)
  • VGG网络模型
  • 自监督学习的学习笔记
  • Python 数据智能实战 (7):智能流失预警 - 融合文本反馈
  • git问题记录-如何切换历史提交分支,且保留本地修改
  • 安卓程序打包与发布
  • 不小心误删了文件,找Windows数据恢复工具来帮忙
  • redis持久化-RDB
  • 数字智慧方案5868丨智慧建造总体策划方案(68页PPT)(文末有下载方式)
  • 泰迪杯特等奖案例学习资料:基于多模态特征融合的图像文本检索系统设计
  • 清洗数据集
  • 数字智慧方案5870丨智慧交通顶层设计方案(89页PPT)(文末有下载方式)
  • 树莓派连接教学
  • 【KWDB 创作者计划】_查询优化器源码分析