home *** CD-ROM | disk | FTP | other *** search
- //: 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;
- } ///:~
-