iosop.cpp

来自「Think in C++ 2nd」· C++ 代码 · 共 57 行

CPP
57
字号
//: C12:Iosop.cpp

// From Thinking in C++, 2nd Edition

// Available at http://www.BruceEckel.com

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// Iostream operator overloading

// Example of non-member overloaded operators

#include "../require.h"

#include <iostream>

#include <strstream>

#include <cstring>

using namespace std;



class IntArray {

  static const int sz = 5;

  int i[sz];

public:

  IntArray() {

    memset(i, 0, sz* sizeof(*i));

  }

  int& operator[](int x) {

    require(x >= 0 && x < sz,

           "operator[] out of range");

    return i[x];

  }

  friend ostream&

    operator<<(ostream& os,

               const IntArray& ia);

  friend istream&

    operator>>(istream& is, IntArray& ia);

};



ostream& operator<<(ostream& os,

                    const IntArray& ia){

  for(int j = 0; j < ia.sz; j++) {

    os << ia.i[j];

    if(j != ia.sz -1)

      os << ", ";

  }

  os << endl;

  return os;

}



istream& operator>>(istream& is, IntArray& ia){

  for(int j = 0; j < ia.sz; j++)

    is >> ia.i[j];

  return is;

}



int main() {

  istrstream input("47 34 56 92 103");

  IntArray I;

  input >> I;

  I[4] = -1; // Use overloaded operator[]

  cout << I;

} ///:~

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?