美文网首页
输入输出运算符的重载

输入输出运算符的重载

作者: devilisdevil | 来源:发表于2021-02-23 22:38 被阅读0次

    输入输出的使用习惯

    首先要知道,我们平时都是怎么使用的输入输出运算符的,比如下面这样

    cin >> a >> b >> c;
    cout << a << b << c << endl;
    

    我们输入/输出首先把某个ostrem/istream对象写再前面(这里就是coutcin了)后面跟着输入>>输出<<符号,再接上要输入/输出的变量。
    而且我们的输入输出是可以拼接的(这是因为每个输入/输出运算返回了原来的ostream/istream对象)

    重载示例

    我们可以为任意类型定义它的输入/输出函数,然后使用上面的形式进行调用,总的来说就分成两类,一种是涉及到访问私有成员的(那么需要将这个函数声明为friend -- 友元函数),另一种就是不涉及私有成员的了

    非友元

    下面定义了一个类D,它有一个私有成员x和一个公有成员y,再不声明为友元的情况下,定义的输出函数就只能访问y而不能访问x

    class D {
    private:
      int x;
    public:
      int y;
      D(int x, int y): x(x), y(y) {}
    };
    
    ostream & operator<<(ostream &os, const D &d) {
      return os << "y: " << d.y;
    }
    

    友元

    如果我要访问私有的x的话,那么我就需要改变一下D,将这个函数声明为友元函数

    class D {
    private:
      int x;
    public:
      int y;
      D(int x, int y): x(x), y(y) {}
      friend ostream & operator<<(ostream &os, const D &d);
    };
    
    ostream & operator<<(ostream &os, const D &d) {
      return os << "y: " << d.y << ", x: " << d.x;
    }
    

    相关文章

      网友评论

          本文标题:输入输出运算符的重载

          本文链接:https://www.haomeiwen.com/subject/xandfltx.html