
下面是一个关于的矩阵的类的C++代码,实现了矩阵的相加,详细问题如下:
最开始的时候,我没有实现"="的重载,当运算到c=a+b的时候,程序就会出现问题,意外的停止,实现了“=”的重载后就会正常,而我的老师也写了一个,里面是直接定义了一个二维...
最开始的时候,我没有实现"="的重载,当运算到c=a+b的时候,程序就会出现问题,意外的停止,实现了“=”的重载后就会正常,而我的老师也写了一个,里面是直接定义了一个二维数组,没有重载“="。求大神解释一下为什么我的需要重载”=“。
class Matrix
{
private:
int row;//行
int col;//列
int** matrix;
public:
Matrix(int r=3,int c=3)
{
row=r;
col=c;
matrix=new int*[row];
for(int i=0;i<row;i++) {
matrix[i]=new int[col];
}
for(i=0;i<row;i++)
for(int j=0;j<col;j++)
matrix[i][j]=0;
}
Matrix(const Matrix &x)
{
row=x.row;
col=x.col;
matrix=new int*[row];
for(int i=0;i<row;i++) {
matrix[i]=new int[col];
}
for(i=0;i<row;i++)
for(int j=0;j<col;j++)
matrix[i][j]=x.matrix[i][j];
}
~Matrix()
{
for(int i=0;i<row;i++)
{
delete[] matrix[i];
}
delete[] matrix;
}
void input()
{
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
cin >> matrix[i][j];
}
void display()
{
int i,j;
for( i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d",matrix[i][j]);
if(j==col-1)
cout << endl;
}
}
}
Matrix& operator=(const Matrix &src) //注意,要重载=运算符
{
int i,j;
for(i=0;i<row;i++)
delete []matrix[i];
delete []matrix;
row=src.row;
col=src.col;
matrix=new int*[row];//动态建立二维数组
for(i=0;i<row;i++)
matrix[i]=new int[col];
for(i=0;i<row;i++)
for(j=0;j<col;j++)
matrix[i][j]=src.matrix[i][j];
return *this;
}
friend Matrix operator+(Matrix &a,Matrix &b);
};
Matrix operator+(Matrix &a,Matrix &b)
{
if(a.row!=b.row||b.col!=b.col) {
cout << "Rows or columns are inconsistent!" << endl;
exit(0);
}
else {
Matrix temp(a.row,a.col);
for(int i=0;i<a.row;i++)
for(int j=0;j<a.col;j++) {
temp.matrix[i][j]=a.matrix[i][j]+b.matrix[i][j];
}
return temp;
}
}
int main()
{
Matrix a(2,2),b(2,2),c(2,2);
a.input();
b.input();
c=a+b;
c.display();
return 0;
} 展开
class Matrix
{
private:
int row;//行
int col;//列
int** matrix;
public:
Matrix(int r=3,int c=3)
{
row=r;
col=c;
matrix=new int*[row];
for(int i=0;i<row;i++) {
matrix[i]=new int[col];
}
for(i=0;i<row;i++)
for(int j=0;j<col;j++)
matrix[i][j]=0;
}
Matrix(const Matrix &x)
{
row=x.row;
col=x.col;
matrix=new int*[row];
for(int i=0;i<row;i++) {
matrix[i]=new int[col];
}
for(i=0;i<row;i++)
for(int j=0;j<col;j++)
matrix[i][j]=x.matrix[i][j];
}
~Matrix()
{
for(int i=0;i<row;i++)
{
delete[] matrix[i];
}
delete[] matrix;
}
void input()
{
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
cin >> matrix[i][j];
}
void display()
{
int i,j;
for( i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d",matrix[i][j]);
if(j==col-1)
cout << endl;
}
}
}
Matrix& operator=(const Matrix &src) //注意,要重载=运算符
{
int i,j;
for(i=0;i<row;i++)
delete []matrix[i];
delete []matrix;
row=src.row;
col=src.col;
matrix=new int*[row];//动态建立二维数组
for(i=0;i<row;i++)
matrix[i]=new int[col];
for(i=0;i<row;i++)
for(j=0;j<col;j++)
matrix[i][j]=src.matrix[i][j];
return *this;
}
friend Matrix operator+(Matrix &a,Matrix &b);
};
Matrix operator+(Matrix &a,Matrix &b)
{
if(a.row!=b.row||b.col!=b.col) {
cout << "Rows or columns are inconsistent!" << endl;
exit(0);
}
else {
Matrix temp(a.row,a.col);
for(int i=0;i<a.row;i++)
for(int j=0;j<a.col;j++) {
temp.matrix[i][j]=a.matrix[i][j]+b.matrix[i][j];
}
return temp;
}
}
int main()
{
Matrix a(2,2),b(2,2),c(2,2);
a.input();
b.input();
c=a+b;
c.display();
return 0;
} 展开
展开全部
c=a+b调用的operator+最后返回的是temp,这需要把temp复制到c,如果没有专门实现=,那么只能做简单复制,也就是row,col,matrix这三个数据的复制,而matrix指向的内容随着temp的消亡而被释放,所以c的matrix指针并不指向有意义的空间
如果用数组来实现,从temp到c复制的时候直接把数组内容也复制过去了,不会有这个问题
如果用数组来实现,从temp到c复制的时候直接把数组内容也复制过去了,不会有这个问题
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询