比如说要定义Date类型的一个简单的输出操作符,它打印年,月,日,以这样的格式(2012,11,27),下面对>>的重新定义解决了这个问题:
ostream& operator<<(ostream& os,const Date& d)
{
return os<<'('<<d.year()
<<','<<d.month()
<<','<<d.day()<<')';
}
使用:
cout<<d1;等价于 operator<<(cout,d1);
>>输入操作符读入形如‘(2012,11,27)’的串并尝试用这三个整数创建一个Date对象。关键在于错误处理
istream& operator>>(istream& is,const Date& dd)
{
int y,m,d;
char ch1,ch2,ch3,ch4;
is>>ch1>>y>>ch2>>m>>ch3>>d>>ch4;
if(!is) return is;
if(ch1!='('||ch2!=','||ch3!='(,'||ch4!=')'||)
{
is.clear(ios_base::failbit);
return is;
}
dd=Date(y,Date::Month(m),d);
return is;
}