Napravio sam na brzinu najjednostavniju i ne potpunu klasu za rad
sa dvodimenzionalnim matricama.Prvo kod:
Code:
template<class t> class DM
{
public:
DM(int a,int b):duz(a)
{
mat=new t*[a];
for (int i=0;i<=a-1;++i) mat[i]=new t[b];
}
~DM()
{
for (int i=0;i<=duz-1;++i) delete [] mat[i];
delete [] mat;
}
t & operator()(int a,int b)
{
return mat[a][b];
}
t * operator()(int a)
{
return mat[a];
}
operator t**()
{
return mat;
}
private:
t **mat;
int duz;
};
Nisam siguran da nema bagova.
U konstruktoru se alocira memorija za dvostruki pokazivac koji je clan
DM klase.U destruktoru se dealocira ta memorija,a ostale funkcije sluze za pristup
clanovima niza po indeksu.Sada da vidimo klasu na djelu:
Code:
//program za testiranje DM klase
void funk(int **a)
{
a[3][4]=157;
}
int main()
{
DM<int> mat(10,10);
funk(mat);
cout<<mat(3,4)<<'\n';
return 0;
}
Izlaz na ekran je "157" sto znaci da je u redu.
Ja samo znam za ovaj nacin prenosenja argumenata(alociranjem memorije sa slobodnog skladista).
Bolje rjesenje(za mene) je da se umjesto klase napravi funkcija koja alocira memoriju...
Code:
int **DM(int a,int b)
{
int **pok;
pok=new int*[a];
for (int i=0;i<=a-1;++i) pok[i]=new int[b];
return pok;
}
... i vraca pokazivac na dvodimenzionalni niz.
Imali boljih nacina?