希望对某个类对象进行读写操作,直接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运算符的实现比较复杂。因为读入的数据可能有问腿。