// Simple Array class to encapsulate a fixed length array // of integers that can be assigned and printed #ifndef _ARRAY_H #define _ARRAY_H #include using namespace std; class Array { public: Array(int size) : len(size) { data = new int[len]; } Array(const Array & a) : len(a.len) { data = new int[len]; for (int i = 0; i < len; ++i) data[i] = a.data[i]; } virtual ~Array() { delete [] data; } int length() const { return len; } // Array element access - lvalue and rvalue virtual int & operator [] (int i) { static int bucket; return (i >= 0 && i < len) ? data[i] : bucket; } virtual int operator [] (int i) const { return (i >= 0 && i < len) ? data[i] : 0; } // Assignment (sizes need not match) Array & operator = (const Array & a) { if (this == &a) return *this; delete [] data; data = new int[len = a.len]; for (int i = 0; i < len; ++i) data[i] = a.data[i]; return *this; } // Utility for printing virtual void print(ostream & o) const { o << "["; for (int i = 0; i < length(); ++i) o << (i == 0 ? "" : " ") << data[i]; o << "]"; } private: int *data; // The values in the array int len; // The size of the array }; inline ostream & operator << (ostream & o, const Array & a) { a.print(o); return o; } #endif