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

C++:流插入、流提取操作符

流插入和流提取操作符是两个我们常用的操作符。对于内置类型我们可以很方便的使用,不过对于自定义类型,要想这两个操作符的结果符合我们的预期,则需要我们自己根据自定义类型来重载这两个操作符。

1.流插入操作符:

我们根据标准库里的实现来,可以知道返回值和参数都是一样的ostream的对象

//假设我们已经实现了date类
class date
{public:operator <<(ostream& out){out<<_year<<"/"<<_month<<"/"<<_day;}
};

不过我们这样实现了依旧调不动

date d1;
cout<<d1;

因为顺序有问题,我们实现的是成员函数,它的第一个操作数默认是this指针,所以需要调换一下使用顺序,不过感觉挺不方便的。

date d1;
d1<<cout;

因为不符合我们的使用逻辑。所以,下一步需要把使用顺序调换过来,那样就不能使用成员函数了,只能定义成公有函数,但是我们仍然需要使用成员变量,于是我们需要用到一个关键字——friend。

//假设我们已经实现了date类
class date
{friend ostream& operator <<(ostream& out,date d1);public:};
ostream& operator <<(ostream& out,date d1){out<<_year<<"/"<<_month<<"/"<<_day;}

这个就是友元声明,友元声明之后,外部的函数或者类就可以访问类里面的所有成员了。关于友元,在该专栏的另一篇文章有更详细的介绍。C++:友元-CSDN博客

注意,函数的返回值也得是ostream的对象,否则

date d1,d2;
cout<<d1<<d2;

以上的情况就无法应对。

同时流插入需要注意是否需要const版本。

2.流提取:

与流插入相似,不过没有const版本。

流插入和流提取都是以空格作为分隔

相关文章:

  • Wordpress头像无法加载太慢问题解决方式
  • Quartus与Modelsim-Altera使用手册
  • 数值运算的误差估计
  • 深入理解深度循环神经网络(Deep RNN)
  • 4.4 os模块
  • 3. 仓颉 CEF 库封装
  • FME处理未知或动态结构教程
  • 微机系统:第二章节:16位的intel8086处理器
  • MLU实现 comfyui+wan2.1 完成图生视频创作
  • 写屏障和读屏障的区别是什么?
  • Javascript基础语法
  • 【C语言输入输出函数应用】
  • Java--图书管理系统(简易版)
  • ENSP-OSPF综合实验
  • 记录学习《手动学习深度学习》这本书的笔记(十一)
  • [Java实战]Spring Boot 定时任务(十五)
  • 深度优先与广度优先:如何用算法思维优化学习策略?
  • go程序编译成动态库,使用c进行调用
  • 数据结构实验9.2:动态查找表的基本操作
  • 机器学习总结
  • 王毅谈中拉命运共同体建设“五大工程”及落实举措
  • 训练孩子的科学思维,上海虹口推出“六个一百”旗舰工程
  • 第一集丨《亲爱的仇敌》和《姜颂》,都有耐人寻味的“她”
  • “电竞+文旅”释放价值,王者全国大赛带火赛地五一游
  • 普京提议重启俄乌直接谈判后,特朗普表态了
  • 中国社科院:网文市场超430亿元,作者破3000万人