下面是一个关于的矩阵的类的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;
}
展开
 我来答
电灯剑客
科技发烧友

2015-11-01 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:1.2万
采纳率:83%
帮助的人:5412万
展开全部
c=a+b调用的operator+最后返回的是temp,这需要把temp复制到c,如果没有专门实现=,那么只能做简单复制,也就是row,col,matrix这三个数据的复制,而matrix指向的内容随着temp的消亡而被释放,所以c的matrix指针并不指向有意义的空间
如果用数组来实现,从temp到c复制的时候直接把数组内容也复制过去了,不会有这个问题
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式