//****************************************************************** // IMPLEMENTATION FILE (dynarray.cpp) // This file implements the DynArray class member functions //****************************************************************** #include "dynarray.h" #include <iostream> #include <cstddef> // For NULL #include <cstdlib> // For exit() using namespace std; // Private members of class: // int* arr; Pointer to array on free store // int size; Size of array //****************************************************************** DynArray::DynArray( /* in */ int arrSize ) // Constructor // Precondition: // arrSize is assigned // Postcondition: // IF arrSize >= 1 && There is room on free store // New array of size arrSize is created on free store // && arr == base address of new array // && size == arrSize // && arr[0..size-1] == 0 // ELSE // Program has halted with error message { int i; // Array index if (arrSize < 1) { cout << "** In DynArray constructor, invalid size: " << arrSize << " **" << endl; exit(1); } size = arrSize; arr = new int[size]; for (i = 0; i < size; i++) arr[i] = 0; } //****************************************************************** DynArray::DynArray( const DynArray& array2 ) // Copy-constructor // Postcondition: // IF there is room on free store // New array of size array2.size is created on free store // && arr == base address of new array // && size == array2.size // && arr[0..size-1] == array2.arr[0..size-1] // ELSE // Program has halted with error message { int i; // Array index size = array2.size; arr = new int[size]; for (i = 0; i < size; i++) arr[i] = array2.arr[i]; } //****************************************************************** DynArray::~DynArray() // Destructor // Postcondition: // Array pointed to by arr is no longer on the free store { delete [] arr; } //****************************************************************** int DynArray::ValueAt( /* in */ int i ) const // Precondition: // i is assigned // Postcondition: // IF i >= 0 && i < size // Function value == arr[i] // ELSE // Program has halted with error message { if (i < 0 || i >= size) { cout << "** In ValueAt function, invalid index: " << i << " **" << endl; exit(1); } return arr[i]; } //****************************************************************** void DynArray::Store( /* in */ int val, /* in */ int i ) // Precondition: // val and i are assigned // Postcondition: // IF i >= 0 && i < size // arr[i] == val // ELSE // Program has halted with error message { if (i < 0 || i >= size) { cout << "** In Store function, invalid index: " << i << " **" << endl; exit(1); } arr[i] = val; } //****************************************************************** void DynArray::CopyFrom( /* in */ DynArray array2 ) // Postcondition: // Array pointed to by arr@entry is no longer on free store // && IF free store has room for an array of size array2.size // New array of size array2.size is created on free store // && arr == base address of new array // && size == array2.size // && arr[0..size-1] == array2.arr[0..size-1] // ELSE // Program has halted with error message { int i; // Array index delete [] arr; size = array2.size; arr = new int[size]; for (i = 0; i < size; i++) arr[i] = array2.arr[i]; }