Szablony, błąd z indeksem tablicy

0

Witam, muszę napisać program z klasą szablonową, która powinna mieć jako składnik prywatny tablicę o ilości elementów, będącą tworzoną dynamicznie. Rozmiar tej tablicy ma być w publicznym polu statycznym klasy. Oprócz tego prostą metodą, która zwraca najmniejszy element tablicy. Tak oto zrobiłem ten program:

#include <iostream>
template<class T>
class tablica
{
public:
static T rozmiar;
tablica(int roz)
{
	tab=new T[roz];
	rozmiar=roz;
} 
~tablica(){delete [] tab;} 
T& operator[](T k);
T najmniejsza();
private:
T* tab;
};

template<class T>
T tablica<T>::rozmiar=0;

template<class T>
T& tablica<T>::operator[](T k)
{return tab[(int)k];}   /////////////////////////////////////////////////////////////jak to zrobić bez rzutowania?

template<class T>
T tablica<T>::najmniejsza(){
	T min = tab[0];
	for(int i=1; i<rozmiar; i++){
		if(tab[i]<min)
		min = tab[i];
	}
	return min;	
}

int main()
{
float s;
std::cout<<"Podaj rozmiar tablicy:"<<std::endl;
std::cin>>s;
std::cout<<"Tablica int"<<std::endl;
tablica <int>i(s);
for(int j=0; j<i.rozmiar; ++j){
std::cout<<"Podaj "<<j+1<<" wartosc tablicy:"<<std::endl;
std::cin>>i[j];
}
std::cout<<"Tablica float"<<std::endl;
tablica <float>f(s);
for(int j=0; j<f.rozmiar; ++j){
std::cout<<"Podaj "<<j+1<<" wartosc tablicy:"<<std::endl;
std::cin>>f[j];
}
std::cout << "Najmniejsza wartosc tablicy(INT): " << i.najmniejsza() << std::endl;
std::cout << "Najmniejsza wartosc tablicy(FLOAT): " << f.najmniejsza() << std::endl;
return 0;
}

Moje pytanie: jak napisać ten program inaczej, bez rzutowania w definicji operatora indeksowania?
I ogólnie będę wdzięczny za pomoc w ew. poprawieniu programu.

2

Poszalałeś trochę z szablonami. Mimo tego, że w tablicy przechowujesz dowolny typ to i tak operator[] powinien przyjmować int lub jakiś inny typ całkowity:
T& operator[](int k);

Poza tym zmienna "rozmiar" nie powinna być statyczna

0

Tak mam w treści zadania, prześlę Ci je na priv.

1 użytkowników online, w tym zalogowanych: 0, gości: 1