本文主要是介绍C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 总说明
输入输出运算符必须是非成员函数,否则他们左侧运算对象将是我们的类的一个对象,好比如下代码:
Sales_data data;
data << cout;
- 由于IO操作通常需要读写类的非公有数据,所以输入输出运算符一般被声明为友元。
- 输入运算符必须处理输入可能失败的情况,而输出运算符不需要。
2. 输出运算符<<
参数说明:
- 第一个形参通常是一个非常量的ostream对象的引用。非常量是因为向流中写入会改变其状态;而引用是因为我们无法复制一个ostream对象。
- 第二个形参是要打印类型的常量引用
- 返回值是它的ostream形参。
eg.
ostream &operator<<(ostream &os,const Sales_data &item)
{os<<item.isbn()<<" "<<item.units_sold<<""<<item.revenue<<" "<<item.avg_price();return os;
}
注意:输出运算符应该主要负责打印对象的内容而非控制格式,输出运算符不应该打印换行符。
3. 输入运算符>>
参数说明:
- 第一个形参通常是运算符将要读取的流的引用
- 第二个形参是将要读取到的(非常量)对象的引用。
- 返回值是它的istream形参。
eg.
istream &opertaor>>(istream &is,Sales_data &item)
{double price;// 不需要初始化,因为我们将先读入数据到`price`,之后才使用它is>>item.bookNo>>iten.units_sold>>price;//检查输入是否成功if(is){item.revenue=item.units_sold*price;}else{item=Sales_data(); //输入失败:对象呗赋予默认的状态}return is;
}
注意:
- 当流含有错误类型的数据时,读取操作可能失败,且之后的其他使用都将失败
- 当读取操作达到文件末尾或者遇到输入流的其它错误时,也会失败
- 当读取操作发生错误时,输入运算符应该负责从错误中恢复。
这篇关于C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!