# C++ Notes:Example - CheckedArray Alternate Style

## CheckedArray Example 2

This shows another way to organize the header file for template classes. In Example - CheckedArray Template Class the constructor/method definitions were in the class. This style puts the method definitions after the class. Note that each method definition must then be preceded with both a template statement and the class qualifier.

    //--- file generic/CheckedArray.h
    #ifndef CHECKEDARRAY_H
    #define CHECKEDARRAY_H

    #include <stdexcept>

    /////////////////////////////////// class CheckedArray<T>
    template<class T>
    class CheckedArray {
    private:
        int size;  // maximum size
        T* a;      // pointer to new space
    public:
        CheckedArray<T>(int max);
        T& CheckedArray<T>::operator[](int index);
    };//end class CheckedArray<T>

    //================================= constructor
    template<class T>
    CheckedArray<T>::CheckedArray<T>(int max) {
        size = max;
        a = new T[size];
    }//end constructor

    //================================= operator[]
    template<class T>
    T& CheckedArray<T>::CheckedArray<T>::operator[](int index) {
        if (index < 0 || index >= size)
            throw out_of_range("CheckedArray");

        return a[index];
    }//end operator[]
    #endif

The calling program is the same as in Template Example 1.