Ecco la classe:

codice:
#ifndef ARRAY_H
#define ARRAY_H

#include <iostream>
using std::cerr;
using std::cout;
using std::cin;
using std::endl;

template <typename T>
class Array
{
	
	
public:
	Array(int = 1); // Costruttore di default
	~Array();
	
	T &operator[](int);
	
	void inizializza();
	void visualizza() const;
	
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 or elemento > dimensioneArray) 
	{
		cerr << "Errore: elemento inesistente." << endl;
	}
}

template<typename T>
void Array<T>::inizializza()
{
	for (int i = 0; i < dimensioneArray; i++) 
	{
		cout << "array[" << i << "]: ";
		cin >> arrayPtr[i];
	}
}

template<typename T>
void Array<T>::visualizza() const
{
	for (int i = 0; i < dimensioneArray; i++) 
	{
		cout << "array[" << i << "] = " << arrayPtr[i] << endl;
	}
}

#endif
Grazie mille per l'help!

Comunque è già un miglioramento degli array normali o è una classe inutile? (So che mancano le ridefinizioni degli operatori, il costruttore di copia, ..., ma volevo farla semplice semplice!).