【C++】class的设计与使用(十)重载iostream运算符

希望对某个类对象进行读写操作,直接cout<<类对象<<endl;cin>>类对象;编译器会报错,所以我们必须提供一份重载的input/output运算符:

重载ostream运算符

cpp 复制代码
ostream& operator<<(ostream &os, const Triangular &rhs)
{
	os<<"("<<rhs.beg_pos()<<","
	  <<rhs.legnth()<<")";
	  
	  rhs.display(rhs.length(),rhs.beg_pos(),os);
	  return os;
	  //传入重载运算符函数的ostream对象又被原封不动地返回
}

//给定对象
Triangular tri(6,3);

cout<<tri<<endl;
//输出结果:(3,6) 6 10 15 21 28 36
  • ostream对象未声明为const,是因为每一次输出都会更改ostream对象的内部状态,rhs这种被输出的对象就会被声明为const。
  • 我们使用了&传址的方式,是基于效率考虑而非为了修改其对象内容。

重载istream运算符

cpp 复制代码
istream& operator>>(istream &is,Triangular &rhs)
{
	char ch1,ch2; 
	int bp,len;
	
	//假设输入为(3,6) 6 10 15 21 28 36
	//那么ch1=='(',bp==3,ch2==',',len==6。
	is>>ch1>>bp>>ch2>>len;

  //设定rhs的三个数据成员
	rhs.beg_pos(bp);
	rhs.length(len);
	rhs.next_reset();
	
	return is;
}

一般而言,input运算符的实现比较复杂。因为读入的数据可能有问腿。

相关推荐
讳疾忌医丶3 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
M78佐菲3 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
lsswear3 小时前
Python 并发 线程
开发语言·python
2401_868534783 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
郑州光合科技余经理4 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi4 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz4 小时前
MLIR OpBuilder
开发语言·python·mlir
蒸蒸yyyyzwd5 小时前
从面经中学到的三件事
c++·笔记
时时三省5 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
红宝村村长5 小时前
windows笔记本双系统ubuntu设置
开发语言