home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C12 / Iosop.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  1.2 KB  |  57 lines

  1. //: C12:Iosop.cpp
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. // Iostream operator overloading
  7. // Example of non-member overloaded operators
  8. #include "../require.h"
  9. #include <iostream>
  10. #include <strstream>
  11. #include <cstring>
  12. using namespace std;
  13.  
  14. class IntArray {
  15.   static const int sz = 5;
  16.   int i[sz];
  17. public:
  18.   IntArray() {
  19.     memset(i, 0, sz* sizeof(*i));
  20.   }
  21.   int& operator[](int x) {
  22.     require(x >= 0 && x < sz,
  23.            "operator[] out of range");
  24.     return i[x];
  25.   }
  26.   friend ostream&
  27.     operator<<(ostream& os,
  28.                const IntArray& ia);
  29.   friend istream&
  30.     operator>>(istream& is, IntArray& ia);
  31. };
  32.  
  33. ostream& operator<<(ostream& os,
  34.                     const IntArray& ia){
  35.   for(int j = 0; j < ia.sz; j++) {
  36.     os << ia.i[j];
  37.     if(j != ia.sz -1)
  38.       os << ", ";
  39.   }
  40.   os << endl;
  41.   return os;
  42. }
  43.  
  44. istream& operator>>(istream& is, IntArray& ia){
  45.   for(int j = 0; j < ia.sz; j++)
  46.     is >> ia.i[j];
  47.   return is;
  48. }
  49.  
  50. int main() {
  51.   istrstream input("47 34 56 92 103");
  52.   IntArray I;
  53.   input >> I;
  54.   I[4] = -1; // Use overloaded operator[]
  55.   cout << I;
  56. } ///:~
  57.