/* Example programs from the book Scientific and Engineering Programming in C++: An Introduction with Advanced Techniques and Examples, Addison-Wesley, 1994. (c) COPYRIGHT INTERNATIONAL BUSINESS MACHINES CORPORATION 1994. ALL RIGHTS RESERVED. See README file for further details. */ // Solution to exercise extending SimpleArray by adding const members template SimpleArray::SimpleArray(int n) { num_elts = n; ptr_to_data = new T[n]; } template SimpleArray::SimpleArray() { num_elts = 0; ptr_to_data = 0; } template SimpleArray::SimpleArray(const SimpleArray& a) { num_elts = a.num_elts; ptr_to_data = new T[num_elts]; copy(a); // Copy a's elements } template void SimpleArray::copy(const SimpleArray& a) { // Copy a's elements into the elements of *this T* p = ptr_to_data + num_elts; T* q = a.ptr_to_data + num_elts; while (p > ptr_to_data) *--p = *--q; } template SimpleArray::~SimpleArray() { delete [] ptr_to_data; } template T& SimpleArray::operator[](int i) { return ptr_to_data[i]; } template const T& SimpleArray::operator[](int i) const { return ptr_to_data[i]; } template int SimpleArray::numElts() const { return num_elts; } template SimpleArray& SimpleArray::operator=(const SimpleArray& rhs) { if ( ptr_to_data != rhs.ptr_to_data ) { setSize( rhs.num_elts ); copy(rhs); } return *this; } template void SimpleArray::setSize(int n) { if (n != num_elts) { delete [] ptr_to_data; // Delete old elements, num_elts = n; // set new count, ptr_to_data = new T[n]; // and allocate new elements } } template SimpleArray& SimpleArray::operator=(const T& rhs) { T* p = ptr_to_data + num_elts; while (p > ptr_to_data) *--p = rhs; return *this; }