您的位置:首页 > 编程语言 > C语言/C++

c++ 重载 >>(输入) 、<< (输出) 操作符

2017-11-11 20:28 375 查看
c++ 重载 >>(输入) 、<< (输出) 操作符

重载输出操作符 <<

为了与标准库IO操作一致,重载 << 操作符函数应把ostream&作为其第一个参数,对类类型const对象的引用作为第二个参数,并返回对ostream形参的引用。

复制代码

ostream& operator<<(ostream& out, const Sales_item& s)

{

out << s.isbn << “\t” << s.units_sold << “\t”

<< s.revenue << “\t” << s.avg_price();

return out;

}

复制代码

一般而言,“<<”应输出对象的内容,进行最小限度的格式化,尤其不应输出换行符,而让用户自己控制输出细节。

“<<”操作符应定义为非成员函数。因为对于类的成员函数,左操作数为该类类型的对象,这样只能将第二个参数作为ostream&,使用时:

Sales_item item;

item << cout;

这与“<<”的正常使用习惯相反。所以“<<”操作符应定义为非成员函数,并将其作为所操作类的友元。

重载输入操作符 >>

与输出操作符类似,输入操作符函数的第一个形参为流的引用,第二个形参为类类型对象的引用(非const,因为 >> 的目的就是将数据读入到该对象中)。

复制代码

istream& operator>>(istream& in, Sales_item& s)

{

double price;

in >> s.isbn >> s.units_sold >> price;

// check that the inputs succeeded

if (in)

s.revenue = s.units_sold * price;

else

s = Sales_item(); // input failed: reset object to default state

return in;

}

复制代码

输入操作符要检测和处理在读入数据时可能发生的错误。如果输入失败,则确保对象处于可用和一致的状态,比如将形参恢复为空的Sales_item对象。除此之外,还可以设置流的条件状态。用户如果想知道输入是否成功,可以测试流。

转载http://www.cnblogs.com/zhuyf87/archive/2013/02/25/2932441.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐