------------------------------------------------------------------------------
MC logo
Safe Integer Array Class
[^] CSc 220 Home
------------------------------------------------------------------------------
[Introduction] [Boolean and Control] [Functions] [Arrays and Pointers] [Dynamic Arrays] [Array Errors] [Command Array] [Standard Containers] [Structs and Classes] [Automatic Pointer] [Multi-File Programs] [Copying Objects] [Templates] [Inheritance] [Plain C I/O] [Type Odds And Ends] [Plain C Strings] [File I/O]
[Safe Integer Array Class] [Safe Integer Array Implementation] [Bounds Error Demo] [Object Copy Demo] [No Copies For Me, Please] [Hidden Calls]
safearr.h
#ifndef _SAFEARR_H_
#define _SAFEARR_H_

#include <iostream>
using namespace std;

class SafeIntArr {
private:
        int *m_space;   // Actual storage space for the array.
        int m_size;     // Size of the array.

        // Make us a copy of the other array.  Allocates m_space of
        // the same size, then copies the contents of other.m_size into it,
        // and copies m_size.
        void copyin(const SafeIntArr &other);

public:
        // Create a new array of the given size.
        SafeIntArr(int asize) { 
                m_size = asize;
                m_space = new int[asize]; 
        }

        // Create an array as a copy of another.
        SafeIntArr(const SafeIntArr &other) { 
                copyin(other);
        }

        // Clean up.
        ~SafeIntArr() { delete [] m_space; }

        // Find out how large this is.
        int size() const { return m_size; }

        // Perform an array assignment.  Delete our space, then make us a
        // copy of other.
        SafeIntArr & operator=(const SafeIntArr &other)
        {
                delete [] m_space;
                copyin(other);
                return *this;
        }

        // Store into the array, or print an error message and don't 
        // change the aray.
        void store(int pos, int tostore);

        // Fetch from pos, or, if pos is out of bounds, print a message
        // and return 0.
        int fetch(int pos) const;

        // Print the array to the stream.
        void print(ostream &out) const;
};

inline ostream & operator<<(ostream &strm, const SafeIntArr &arr) 
{
        arr.print(strm);
        return strm;
}

#endif