Tralasciando la qualità dell'implementazione:


codice:
#ifndef ARRAY_H
#define ARRAY_H


#include <iostream>


template <typename T>
class Array
{
	
	
public:
	Array(int = 1); // Costruttore di default
	~Array();
	
	T & operator[](int);
	
private:
	int dimensioneArray;
	T* arrayPtr;
};



template <typename T>
Array<T>::Array(int dimensione)
{
	if (dimensione > 0) // Controlla che la dimensione sia valida
	{
		dimensioneArray = dimensione;
	}
	else // Imposta la dimensione di default (1)
	{
		dimensioneArray = 1;
	}
	
	arrayPtr = new T[dimensioneArray]; // Alloca l'array dinamico
	
	for (int i = 0; i < dimensioneArray; i++) // Inizializza tutti gli elementi a 0
	{
		arrayPtr[i] = 0;
	}
}

template <typename T>
Array<T>::~Array()
{
	delete [] arrayPtr; // Dealloca la memoria occupata
}

template <typename T>
T & Array<T>::operator[](int elemento)
{
	if (elemento < 0 || elemento >= dimensioneArray) 
	{
		std::cerr << "Errore: elemento inesistente." << std::endl;
	}
	
	return arrayPtr[ elemento ];
}



#endif