希望对某个类对象进行读写操作,直接cout<<类对象<<endl;
或cin>>类对象;
编译器会报错,所以我们必须提供一份重载的input/output运算符:
重载ostream运算符
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运算符
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运算符的实现比较复杂。因为读入的数据可能有问腿。