当前位置: 首页 > 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版本。

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

http://www.dtcms.com/a/184773.html

相关文章:

  • 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:动态查找表的基本操作
  • 机器学习总结
  • 操作系统原理实验报告
  • 常用的rerank模型有哪些?都有什么优势?
  • AI(学习笔记第三课) 使用langchain进行AI开发(2)
  • Java原生结合MQTTX---完成心跳对话(附带源码)
  • Linux 进程等待
  • 数字化工厂中央控制室驾驶舱系统 API接口文档
  • 洛谷题目:P1673 [USACO05FEB] Part Acquisition S 题解(本题简)
  • python【扩展库】websockets
  • C 语言报错 xxx incomplete type xxx
  • STM32f103 标准库 零基础学习之按键点灯(不涉及中断)