// MT2Q2alt.cpp /////////////////////////////////////////////////////////// // enclosed counted as complete solution template class array { public: array(size_t n=5); array(const array& arr); ~array(); array& operator=(const array& arr); T& operator[](size_t n); T operator[](size_t n) const; void append(const T& t); size_t size(); private: void resize(size_t newCapacity); T* pT_; size_t size_, capacity_; }; template T& array::operator[](size_t n) { if(n<0 || size_ <= n) throw std::exception("index outside bounds of array"); return pT_[n]; } template T array::operator[](size_t n) const { if(n<0 || size_ <= n) throw std::exception("index outside bounds of array"); return pT_[n]; } template void array::append(const T& t) { if(capacity_ == size_) resize(2*size_); pT_[size_++] = t; } template void array::resize(size_t newCapacity) { if(newCapacity <= capacity_) throw std::exception("new capacity must be larger than old"); else capacity_ = newCapacity; T* temp = new T[capacity_]; for(size_t i=0; i array::array(size_t n=5) : pT_(new T[n]), size_(n), capacity_(n) { for(size_t i=0; i array::array(const array& arr) : size_(arr.size_), capacity_(arr.capacity_) { pT_ = new T[arr.capacity_]; for(size_t i=0; i array::~array(){ delete [] pT_; } template array& array::operator=(const array& arr) { if(this == &arr) return *this; delete pT_; pT_ = new T[arr.size_]; for(int i=0; i size_t array::size() { return size_; } #include template void show(array& arr) { std::cout << "\n "; for(size_t i=0; i arr(3); try { arr[0] = 0; arr[1] = 1; arr[2] = 2; arr.append(3); arr.append(4); arr.append(5); arr.append(6); // will throw exception - outside bounds of array // arr[7] = 7; show(arr); array copy = arr; show(copy); } catch(std::exception& ex) { std::cout << "\n " << ex.what(); } }