[C con Clase] implementacion clase matriz
Steven Davidson
srd4121 en njit.edu
Dom Sep 27 18:30:54 CEST 2009
Hola Evelyn,
Evelyn Adaro wrote:
>
> no sabes cuanto he googleado y aun no encuentro una respuesta.
> , esto es lo que no me deja hacer,
> Matriz::Matriz(int tam)
> {
> Mat=new Mat[tam][tam];
>
> }
> Mat esta definido como atributo privado
>
>
En primer lugar, 'Mat' es un puntero y no un tipo. Por lo tanto, debería
ser así:
Mat = new double[tam][tam];
Sin embargo, no puedes usar 'new' para crear un array multidimensional
directamente. Lo que realmente estás haciendo es crear un array dinámico
de un array "estático". Esto es,
Mat = new double[tam][10];
Aquí crearías un array dinámico de 'tam' elementos y cada elemento es un
array [estático] de 10 elementos de tipo 'double'.
Esto es equivalente a hacer esto:
typedef double COLS_T[10];
...
Mat = new COLS_T[tam];
Para lo que quieres hacer tendrás que crear un array dinámico de
punteros, donde cada puntero apuntará a otro array dinámico. Esto es,
double **Mat;
...
// 'tam' filas
Mat = new double *[tam];
// cada fila tiene 'tam' columnas
for( int i=0; i<tam; i++ )
Mat[i] = new double[tam];
La primera creación del array, antes del bucle 'for', sirve como
"directorio". Cada elemento de ese "directorio" apuntará a otro array
dinámico. Ahora podemos usar 'Mat' casi como un array estático. Por ejemplo,
Mat[0][5] = -.1174;
Esto implica que tienes que liberar la memoria con 'delete[]'. Esto es,
// Libera cada columna
for( int i=0; i<tam; i++ )
delete[] Mat[i];
// Libera las filas
delete[] Mat;
Existe otra forma, pero creo que esto te servirá para tus fines.
Sugiero que revises el capítulo 17 en nuestro curso de C++. Puedes
dirigirte a: http://c.conclase.net/curso/index.php?cap=017
Espero que esto aclare la duda.
Steven
Más información sobre la lista de distribución Cconclase