C/Visual C - ayuda con sobrecarga de op

 
Vista:

ayuda con sobrecarga de op

Publicado por julio (1 intervención) el 11/09/2003 02:22:27
alguien me puede ayudar , sobre como sobre cargar el operador + para que sume dos matrices de n*n.
Matriz& Matriz::operator + (const Matriz &a)
{
Matriz *res = new Matriz(n,m);
if(a.n==n)&&(a.m==m){
for(int i=0 ;i<a.n; i++)
for(int j=0;j<a.m;j++)
(*res)(i,j) = a(i,j)+(->this)(i,j);}
return res;
}
else
(->res)set(0,0);
return *res;

}
Matriz& Matriz::operator * (const Matriz &a)
{
Matriz *res = new Matriz(n,m);
if(a.n == n)&&(a.m == m){
for(int i=0;i<a.n;i++)
for(int j=0;j<a.m; j++)
for(int k=0; (*res(i,j)=0;k<a.n;k++)
(*res)(i,j) = a(i,k)*(*this)(k,j);}
return *res;
else
(->res)set(0,0);
return *res;
}

set(0,0) es un metodo que yo defini para que me muestre un arreglo bidimencional de puros ceros . o matriz cero.
El problema que tengo es con la reserva de memoria dinamica, tengo que borrala con DELETE , si es así como le hago.?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda con sobrecarga de op

Publicado por chuidiang (677 intervenciones) el 11/09/2003 06:28:45
Pues si, cuando se reserva algo con new, luego debería liberarse con delete. En tu caso, devuelves un puntero a esa memoria, así que el que ha llamado a la suma debería liberarlo cuando ya no lo necesite.

De todas formas, no tienes el operador totalmente bien definido. Si quieres que devuelva un puntero, deberías declararlo

Matriz* Matriz::operator + (const Matriz &a); // con asterisco

Al ser

Matriz& Matriz::operator + (const Matriz &a) // con ampersand
{
Matriz res(m,n);
...
return res
}

debes devolver una matriz, no un puntero. De esta forma ya no necesitas liberarlo fuera.

Me queda la duda de si es correcto devolver un & y devolver una variable local. Si tienes problemas de resultados extraños, trata de hacerlo asi

Matriz Matriz::operator + (const Matriz &a) // Sin & ni *
{
Matriz res(m,n);
...
return res;
}

y deberías redefinir un constructor copia Matriz::Matriz (Matriz &), ya que el compilador lo utilizará en estos return.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar