输入和输出运算符重载
重载输出运算符 <<
通常情况下,输出运算符的第一个形参是一个非常量 ostream 对象的引用。之所以 ostream 是非常量是因为向流写入内容会改变其状态;而该形参是引用是因为我们无法直接复制一个 ostream 对象。
第二个形参一般来说是一个常量的引用,该常量是我们想要打印的类类型。
为了与其他输出运算符保持一致,poerator<< 一般要返回它的 ostream 形参。
与 iostream 标准库兼容的输入输出运算符必须是普通的非成员函数,而不能是类的成员函数。否则,它们的左侧运算对象将是我们的类的一个对象。
Demo demo;
demo << cout; //如果 operator<< 是 Demo 的成员
IO运算符一般被声明为友元
示例代码:
class Demo
{
public:
Demo(const int &n, const string &str) : id(n), name(str) { };
friend ostream &operator<< (ostream &os, const Demo &demo);
private:
int id;
string name;
};
ostream &operator<< (ostream &os, const Demo &demo)
{
os << demo.id << " " << demo.name << endl;
return os;
}
void main()
{
Demo demo(1, "zhoujianyu");
cout << demo << endl;
}
重载输入运算符
第一个参数是运算符将要读取的流的引用;
第二个参数是将要读入到的(非常量)对象的引用
示例代码:
istream &operator>> (istream &is, Demo &demo)
{
is >> demo.id >> demo.name;
if (is) //检查是否插入失败
;
else
demo = Demo();
return is;
}