Error Sobrecarga Operador + en clase Matriz
Publicado por Eduardo (4 intervenciones) el 15/07/2008 14:54:16
#include <iostream>
using namespace std;
class Matriz
{
public:
double ** x;
Matriz(int Heigth,int Width);
~Matriz();
void Grafica();
void Identity();
bool Cuadrada();
int heigth();
int width();
void operator=(Matriz & A);
Matriz operator +(Matriz & A);
private:
int itsHeigth;
int itsWitdh;
};
Matriz::Matriz(int Heigth,int Width)
{
x = new double * [Heigth];
int i,j;
itsHeigth=Heigth;
itsWitdh=Width;
for (i=0; i<itsHeigth; i++)
x[i] = new double[itsWitdh] ;
for (i= 0 ; i<itsHeigth ; i++ )
for (j= 0 ; j<itsWitdh ; j++ )
this->x[i][j]=0;
}
Matriz::~Matriz()
{
int i;
for (i=0; i<itsHeigth; i++) delete [ ] this->x[i] ;
}
int Matriz::heigth()
{
return itsHeigth;
}
int Matriz::width()
{
return itsWitdh;
}
void Matriz::Identity( )
{
int i,j;
for (i= 0 ; i<itsHeigth; i++ )
{
for (j= 0 ; j<itsWitdh; j++ )
if (i==j)
this->x[i][j]=1;
}
}
void Matriz::Grafica( )
{
cout << " ";
int i,j;
for (i= 0 ; i<itsHeigth ; i++ )
{
cout<<' ';
for (j= 0 ; j<itsWitdh ; j++ )
{
cout<<this->x[i][j]<<' ';
}
}
}
void Matriz::operator=(Matriz & A)
{
for (int i =0 ; i < itsWitdh ; i++)
{
for (int j = 0 ; j < itsHeigth ; j++)
{
x[i][j] = A.x[i][j];
}
}
}
Matriz Matriz::operator +(Matriz & A)
{
int i,j;
Matriz resultado(A.heigth(),A.width());//Creo una matriz Resultado para
//devolver del mismo tamaño que A
for (i=0;i<resultado.heigth();i++)
{
for (j=0;j<resultado.width();i++)
{
resultado.x[i][j]=A.x[i][j]+x[i][j]; //Cuando se llega al final de la primera fila
} //es decir i=0 y j=resultado.width() da un
} //error ver arriba
return resultado;
}
bool Matriz::Cuadrada()
{
if (itsHeigth==itsWitdh)
{
return true;
}
else
{
return false;
}
}
int main()
{
int H,W;
cout << "Entre el Alto de su matriz ";
cin>>H;
cout << "Entre el Aancho de su matriz ";
cin>>W;
Matriz Matriz1(H,W);Matriz Matriz2(H,W);Matriz Matriz3(H,W);
MyMatriz.Grafica();
Matriz3=Matriz1+Matriz2;//Porque no funciona incluso
//cuando el operador creo esta bien
cin.get();
cin.get();
return 0;
}
using namespace std;
class Matriz
{
public:
double ** x;
Matriz(int Heigth,int Width);
~Matriz();
void Grafica();
void Identity();
bool Cuadrada();
int heigth();
int width();
void operator=(Matriz & A);
Matriz operator +(Matriz & A);
private:
int itsHeigth;
int itsWitdh;
};
Matriz::Matriz(int Heigth,int Width)
{
x = new double * [Heigth];
int i,j;
itsHeigth=Heigth;
itsWitdh=Width;
for (i=0; i<itsHeigth; i++)
x[i] = new double[itsWitdh] ;
for (i= 0 ; i<itsHeigth ; i++ )
for (j= 0 ; j<itsWitdh ; j++ )
this->x[i][j]=0;
}
Matriz::~Matriz()
{
int i;
for (i=0; i<itsHeigth; i++) delete [ ] this->x[i] ;
}
int Matriz::heigth()
{
return itsHeigth;
}
int Matriz::width()
{
return itsWitdh;
}
void Matriz::Identity( )
{
int i,j;
for (i= 0 ; i<itsHeigth; i++ )
{
for (j= 0 ; j<itsWitdh; j++ )
if (i==j)
this->x[i][j]=1;
}
}
void Matriz::Grafica( )
{
cout << " ";
int i,j;
for (i= 0 ; i<itsHeigth ; i++ )
{
cout<<' ';
for (j= 0 ; j<itsWitdh ; j++ )
{
cout<<this->x[i][j]<<' ';
}
}
}
void Matriz::operator=(Matriz & A)
{
for (int i =0 ; i < itsWitdh ; i++)
{
for (int j = 0 ; j < itsHeigth ; j++)
{
x[i][j] = A.x[i][j];
}
}
}
Matriz Matriz::operator +(Matriz & A)
{
int i,j;
Matriz resultado(A.heigth(),A.width());//Creo una matriz Resultado para
//devolver del mismo tamaño que A
for (i=0;i<resultado.heigth();i++)
{
for (j=0;j<resultado.width();i++)
{
resultado.x[i][j]=A.x[i][j]+x[i][j]; //Cuando se llega al final de la primera fila
} //es decir i=0 y j=resultado.width() da un
} //error ver arriba
return resultado;
}
bool Matriz::Cuadrada()
{
if (itsHeigth==itsWitdh)
{
return true;
}
else
{
return false;
}
}
int main()
{
int H,W;
cout << "Entre el Alto de su matriz ";
cin>>H;
cout << "Entre el Aancho de su matriz ";
cin>>W;
Matriz Matriz1(H,W);Matriz Matriz2(H,W);Matriz Matriz3(H,W);
MyMatriz.Grafica();
Matriz3=Matriz1+Matriz2;//Porque no funciona incluso
//cuando el operador creo esta bien
cin.get();
cin.get();
return 0;
}
Valora esta pregunta


0