C++ TDA memoria dinamica y templates
Hola este no es un tutorial, solo es un programa en C++ que estoy haciendo para una clase donde tenemos que crear un tipo de dato abstracto Matriz, sobrecargar algunos operadores y métodos, usar algo de manejo de memoria dinámica y templates.
Dejo el código por si a alguien le sirve 🙂 …
Implementacion
#include
#include "Matriz.h"
//#include //descomentar esta linea en windows
using namespace std;
int main(){
int opc = 0;
Matriz a(1),b(1),c,d;
a.llenaMatriz();
b.llenaMatriz(1);
do
{
cout<<"[0] Sumar matrices"<<<"[1] Multiplicar matrices"<<<"[2] Mostrar matrices"<<<"[3] Transpuesta (los resultados de suma/multiplicacion)"<<<"[4] Las diagonales (los resultados de suma/multiplicacion)"<<<"[5] Numero menor de la matriz (los resultados de suma/multiplicacion)"<<<"[6] Salir del programa"<<<<"Elije una opcion: "; cin>>opc;
switch(opc)
{
case 0:
c=a+b;
cout<<<<"Matriz A"<<<<"Matriz B"<<<<<<"El numero menor de la Matriz: "<<<<<"Es: "<<<<<<"Gracias por usar el programa";
break;
default:
cout<<"Opcion invalida, elije un numero del menu";
}
}while(opc != 6);
//getch(); //descomentar esta linea en windows
return 0;
}
Diseño
#include
#include
#include
#include
using namespace std;
const int ren = 5;
const int col = 5;
template class Matriz
{
public:
//constructores
Matriz();
Matriz(T);
Matriz(Matriz &);
~Matriz();
//metodos
void operator = (const Matriz &);
T getDato(int, int);
void setDato(int, int, T);
void transpuesta (Matriz &);
void muestradiagonales();
void llenaMatriz();
void llenaMatriz(int);
T menor();
private:
//puntero a punteros
T **datos;
//T datos[ren][col];
};
templateMatriz::~Matriz()
{
//liberar localidades de memoria
for (int i=0; iMatriz::Matriz()
{
//datos = new T[ren*col];
datos = (T **)malloc (sizeof(int *)*col); /*Reservas tantos punteros como filas*/
for (int i=0; iMatriz::Matriz(T valorinicial)
{
//datos = new T[ren*col];
datos = (T **)malloc (sizeof(int *)*col); /*Reservas tantos punteros como filas*/
for (int i=0; i void Matriz::llenaMatriz()
{
int n = 0;
srand(time(NULL));
for(int i = 0; isetDato(i,j,n);
}
}
}
template void Matriz::llenaMatriz(int sal)
{
int n = 0;
srand(time(NULL));
for(int i = 0; i 100) {setDato(i,j,100);}else{
setDato(i,j,n+sal);}
}
}
}
templateMatriz::Matriz( Matriz &M)
{
//datos = new T[ren*col];
datos = (T **)malloc (sizeof(int *)*col); /*Reservas tantos punteros como filas*/
for (int i=0; iT Matriz::getDato(int c, int r)
{
//c = columna
//r = renglon
return datos[c][r];
//return datos[col*c+r];
}
template T Matriz::menor()
{
int menor = this->getDato(0,0);
for(int i = 0; igetDato(i,j) < menor) menor = this->getDato(i,j);
}
}
return menor;
}
templatevoid Matriz::muestradiagonales()
{
int renglon = ren-1;
cout<getdato(i,i)<<"]"; !="col)" &="" (matriz="" -="" 1;="" aceptan="" c,="" cout<="" cout<<"solo="" cout<getdato(renglon,i)<<"]";="" cuadradas";="" dato)="" datos[c][r]="dato;" datos[col*c+r]="dato;" datos[col*r+c]="dato;" else="" float="" for(int="" i="0;" if(ren="" int="" isetdato(i,j,m.getdato(j,i));="" m)="" matrices="" matriz::setdato(int="" matriz::transpuesta="" r,="" renglon="renglon" se="" t="" template="" this-="" tmp="0;" void="" {="" }="">setDato(j,i,tmp);
}
}
}
}
template void Matriz::operator = (const Matriz &igualar)
{
int i = 0, j = 0;
for(i = 0; isetDato(i,j,igualar.datos[i*j]);
//this->setDato(i,j,igualar.datos[i*j]);
this->setDato(i,j,igualar.datos[i][j]);
this->setDato(i,j,igualar.datos[i][j]);
}
}
}
template Matriz operator + (Matriz &uno, Matriz &dos)
{
Matriz temp;
for(int i = 0; i Matriz operator * (Matriz &uno, Matriz &dos)
{
int i = 0, j = 0, k = 0;
Matriz objTemp;
for(i = 0; i std::ostream& operator<< (std::ostream &salida, Matriz &objeto)
{
for(int i = 0; i
### Descargar los archivos
[practica3.cpp][1]
[Matriz.h][2]
salu2
PD: El banner del post no tiene nada que ver xD, lo que pasa que en ese momento estaba jugando Super Meat Boy :p
[1]: http://www.alevsk.com/proyectos/programacion/practica3.cpp
[2]: http://www.alevsk.com/proyectos/programacion/Matriz.h
```</getdato(i,i)<<"]";>