Sunteți pe pagina 1din 2

Clase generice

Operatii pe matrice, intr-o clasa generica.


#include<iostream>
#include<iomanip>

using namespace std;


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


matrice */
template <class T>
istream& operator>>(istream& x,matrice<T>& a)
{
for(int i=0;i<a.m;i++)
for(int j=0;j<a.n;j++)
{
cout<<"\telem["<<i+1<<"]["<<j+1<<"]= ";
x>>*a(i,j); // apel al operatorului '()' supraincarcat
}
return x;
}

/* supraincarcarea operatorului 'insertie in flux' pentru afisarea elementelor unei


matrice */
template <class T>
ostream& operator<<(ostream& x,matrice<T> a)
{
for(int i=0;i<a.m;i++)
{
for(int j=0;j<a.n;j++)
x<<setw(6)<<*a(i,j);
x<<endl;
}
return x;
}

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;

system("pause");
return (0);
}

S-ar putea să vă placă și