Bueno, tras un poco más de investigación y consultas, lo que fallaba principalmente en el código estaba en el constructor de copia y en la sobrecarga del operador asignación. Como se puede comprobar, ambos crean la estructura de las matrices, pero no les dan el valor de la matriz origen, por tanto, quedan en basura y provocan el mal funcionamiento. Este es el código reescrito:
El tema del return no tiene nada que ver. Igual es por el compilador que utilizo, pero no tengo problemas con los paréntesis ni sin ellos. Gracias por el interés, de todos modos.
Sin embargo, creo que nunca descubriré por qué devolvía 3....
Código (cpp) [Seleccionar]
......
......
//Constructor de copia
Matriz (const Matriz &matriz){
NF=matriz.NF;
NC=matriz.NC;
//Estructura de matriz
M=new int *[NF];
for(int i=0;i<NF;i++){
M[i]=new int[NC];
}
//Contenido de matriz
for(int k=0;k<NF;k++){
for(int l=0;l<NC;l++){
M[k][l]=matriz.M[k][l];
}
}
}
.....
......
//Operador asignacion
Matriz operator = (Matriz m){
if(NF!=m.NF){
for(int i=0;i<NF;i++){
delete []M[i];
}
delete []M;
}
//Estructura de matriz
NF=m.NF;
NC=m.NC;
M=new int *[NF];
for(int j=0;j<NF;j++){
M[j]=new int [NC];
}
//Contenido de matriz
for(int k=0;k<m.NF;k++){
for(int l=0;l<m.NC;l++){
M[k][l]=m.M[k][l];
}
}
return(*this);
}
.....
......
El tema del return no tiene nada que ver. Igual es por el compilador que utilizo, pero no tengo problemas con los paréntesis ni sin ellos. Gracias por el interés, de todos modos.
Sin embargo, creo que nunca descubriré por qué devolvía 3....