template <class T> class matrice { int m,n; // m - numarul de linii, n - numarul de coloane T* mat; // matricea, pentru se va aloca memorie in zona de memorare HEAP public: matrice(int=1,int=1); // constructor de initializare cu parametri T* operator()(int,int); /* supraincarcarea operatorului special 'apel de functie' pentru determinarea unui element al matricei dintr-o anumita pozitie, pozitie data ca parametru*/ friend istream& operator>>(istream&,matrice<T>&); /*supraincarcarea operatorului 'extragere din flux' pentru citirea elementelor unei matrice */ friend ostream& operator<<(ostream&,matrice<T>); /*supraincarcarea operatorului 'insertie in flux' pentru afisarea elementelor unei matrice */ };
/* constructor de initializare cu parametri */
template <class T> inline matrice<T>::matrice(int i,int j): m(i), n(j) { mat=new T[m*n]; /* alocam memorie suficienta in zona HEAP pentru pastrarea unui tablou m*n elemente intregi */ }
/* supraincarcarea operatorului special 'apel de functie' pentru determinarea unui
element al matricei dintr-o anumita pozitie, pozitie data ca parametru */ template <class T> T* matrice<T>::operator()(int i,int j) { return mat+i*n+j; /* adresa elementului de pe pozitia de linie i si coloana j a unei matrice */ }
/* supraincarcarea operatorului 'extragere din flux' pentru citirea elementelor unei
int main() { int m,n; // m - nr de linii, n - nr de coloane
cout<<"Dati dimensiunea matricelor:\n";
cout<<"\tnumarul de linii: "; cin>>m; cout<<"\tnumarul de coloane: "; cin>>n; matrice<int> a(m,n),b(m,n); // apel al constructorului de initializare cu parametri
cout<<"Citim matricea A:\n";
cin>>a; // apel al functiei ce supraincarca operatorul '>>' cout<<"Citim matricea B:\n"; cin>>b;
cout<<endl<<"Dati o tasta ptr. a continua...";
cin.get(); system("cls");
cout<<"Afisam matricea A:\n";
cout<<a; // apel al functiei ce supraincarca operatorul '<<' cout<<"Afisam matricea B:\n"; cout<<b;