14.2.1重载输出运算符
| Ostream& operator<<(ostream&os, const Sales_data &item); Sales_data data; Data<<cout;// 若是成员 |
1. 输入和输出运算符 1)Io 库定义了用其读写内置类型的版本,而类需要自定义其对象的新版本 2. 重载输出运算符<< 1)第一个形参是非常量ostream对象的引用(因为会改变其状态,无法直接复制一个ostream) 2)第二个形参是一个常量的引用,打印的类型,引用是避免复制实参,打印不会改变对象内容 3. 输出运算符尽量减少格式化操作 1)让用户控制endl这些 4. 输入输出运算符必须是非成员函数 Data<<cout;//是不符合重载运算符的规则的,虽然可以,但是不好,所以需要为非成员函数,让第一个参数是cout,第二个参数是对象。 1)因为左侧运算对象是我们类的第一个对象 2)假设输入输出是某个类的成员,则他们也必须是istream或ostream的成员。 所以,我们希望为类自定义IO运算符,需要定义为非成员函数。 |
14.2.2重载输入运算符
| Istream&operator>>(istream&is,Sales_data &item); |
1. 重载输入运算符>> 1)通常第一个形参是运算符要读取的流的引用 2)第二个形参是要读入到的非常量对象的引用,不是const 2. Sales_data的输入运算符 1)Note: 输入运算符可能有错,而输出运算符没有 3. 输入时的错误 1)类型不匹配 2)当达到文件末尾或遇到其它错误 3)可以等读取完一次性检查 Note:读取发生错误时,输入运算符应该负责从错误中恢复 4. 标示错误 1)Failbit,eofbit,badbit |