输入和输出运算符重载

输入和输出运算符重载

重载输出运算符 <<

通常情况下,输出运算符的第一个形参是一个非常量 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;
     }

猜你喜欢

转载自blog.csdn.net/Zhoujy1996/article/details/80781796