Código:
Si alguien ha hecho alguno de matrices dinámicas utilizando clases que me pueda hechar una mano //MATRICES DINAMICAS CON SOBRECARGA DE OPERADORES //Powered by Gel. # include <iostream.h> # include <conio.h> enum logico {FALSE,TRUE}; class matrix { int f,c; //filas, columnas int **mat; public: matrix(int fil=0, int col=0); //prototipo constructor int filas(){return f;} int columnas(){return c;} matrix operator + (matrix &b); matrix operator * (matrix &b); logico operator == (matrix &b); logico igualdimencion(matrix &b); logico puedemultiplicarcon(matrix &b); friend ostream& operator<<(ostream& , matrix &); //salida friend istream& operator>>(istream& , matrix &); //entrada ~matrix(); //Prototipo Destructor }; matrix::matrix(int fil,int col) //constructor { f=fil; c=col; //asignación de memoria dinámica a la matriz if (f!=0) { mat = new int * [f]; //para las fila for (int i=0;i<f;i++) mat[i] = new int [c]; //para las columnas //inicialización de valores de la matriz for (i=0;i<f;i++) for (int j=0;j<c;j++) mat[i][j]=0; //todos los elementos a cero } cout<<"\n\t Constructor matriz"; } matrix::~matrix() //Destructor { int i; for(i=0;i<f;i++) { if (mat!=0) delete [] mat[i]; //libera las filas de la matriz } if (mat!=0) delete [] mat; // libera el puntero mat cout<<"\n\t Destructor matriz"; } ostream& operator<<(ostream &os, matrix &a) //operador de salida standard { for (int i=0;i<a.f;i++) //for 1 { for (int j=0;j<a.c;j++) os<<a.mat[i][j]<<" "; os<<"\n"; //una linea por cada fila impresa } //for 1 return os; } istream& operator>>(istream &is, matrix &a) //operador de entrada standard { int i,j; for (i=0;i<a.f;i++) //for 1 for (j=0;j<a.c;j++) //for 2 { cout<<"Elemento ["<<i<<"]["<<j<<"]: "; is>>a.mat[i][j]; } return is; } matrix matrix::operator + (matrix &b) //operador + sobrecargado { matrix res(f,c); int i,j; for (i=0;i<b.f;i++) //for 1 for (j=0;j<b.c;j++) //for 2 res.mat[i][j] = mat[i][j] + b.mat[i][j]; //suma de matrices return res; } matrix matrix::operator*(matrix &b) //operador multiplicacion sobrecargado { matrix res(b); //constructor por copia for (int i=0;i<b.f;i++) //for 1 for (int j=0;j<b.c;j++) //for 2 { res.mat[i][j]=0; for (int k=0;k<b.f;k++) res.mat[i][j] = res.mat[i][j] + mat[i][k]* mat[k][j]; } return res; } logico matrix::operator == (matrix &b) //operador de igualdad sobrecargado { int i,j; logico identica; identica = TRUE; if ((f!=b.f)||(c!=b.c)) identica=FALSE; else for (i=0;i<b.f;i++) //for 1 for (j=0;j<b.c;j++) if (mat[i][j]!=b.mat[i][j]) identica=FALSE; return identica; } logico matrix::igualdimencion(matrix &b) { if ((f==b.f) && (c==b.c)) return TRUE; else return FALSE; } logico matrix::puedemultiplicarcon(matrix &b) { if (c==b.f) return TRUE; else return FALSE; } //Inicio programa principal void main() { // int filas,columnas; matrix a(2,2),b(2,2);//,c(2,2); int op; do{ //clrscr(); cout<<"\n\t **** MENU DE OPCIONES **** "; cout<<"\n\t 1. Suma de matrices"; cout<<"\n\t 2. Multiplicación de matrices"; cout<<"\n\t 3. Salir del programa"; cout<<"\n\t ¿Qué opción desea? -> ";cin>>op; if ((op>=1)&&(op<=2)) { cout<<"\n\t Ingresar matriz A \n"; //cout<<"\n\t Filas: ";cin>>filas; //cout<<"\n\t Columnas: ";cin>>columnas; //matrix a(filas,columnas); //construir la matriz a cin>>a; cout<<"\n\t Ingresar matriz B \n"; //cout<<"\n\t Filas: ";cin>>filas; //cout<<"\n\t Columnas: ";cin>>columnas; //matrix b(filas,columnas); //construir la matriz b cin>>b; } switch(op) { case 1: cout<<"\n\t SUMA DE MATRICES: "; cout<<"\n Matriz A: \n"<<a; cout<<"\n Matriz B: \n"<<b; //c=(a+b); cout<<"\n Matriz resultado: \n"<<(a+b); break; case 2: cout<<"\n\t MULTIPLICACION DE MATRICES: "; cout<<"\n Matriz A: \n"<<a; cout<<"\n Matriz B: \n"<<b; cout<<"\n Matriz resultado: \n"<<(a*b); break; case 3: cout<<"\n\t Fin del programa..."; break; default: cout<<"\n\t Opción incorrecta [1..3]!"; break; }//switch getch(); }while (op!=3); //do while } //main