// Author: Hannah C. Tang (hctang@cs) // // Specification for a templated array class with bounds checking #ifndef ARRAY_HH #define ARRAY_HH template< typename T > class Array { // // Canonical form is the 4 standard functions which should be // implemented for *any* class which uses dynamic memory: // (1) default constructor, (2) copy constructor, (3) assignment op // (4) destructor // private: // The default constructor will be private and unimplemented // because it's not supposed to be called Array( void ); // (1) default constructor public: Array( int initCapacity ); // overloaded constructor Array( const Array& other ); // (2) copy constructor const Array& operator=( const Array& other ); // (3) assign op ~Array( void ); // (4) destructor // There are two versions of the indexing operator -- the const // version is for accessing data in const Arrays. const T& operator[]( int index ) const; T& operator[]( int index ); int GetCapacity( void ); private: // I follow a subset of the "hungarian" naming convention, where // data members are prefaced with a "m_" and pointers with a "p" // Hungarian is not required for this class, but some sort of // consistant naming convention *is*. int m_capacity; T* m_pData; // Helper methods for canonical form void Copy( const Array& other ); void Destroy( void ); }; #endif // ARRAY_HH