运算符重载的问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 20:54:26
我定义了一个矩阵类,重载+运算,使两个矩阵类对象里的矩阵相加#include<iostream>
using namespace std;
class Matrix{
public:
//构造函数
Matrix(int line=0,int row=0)
{
lines=line;
rows=row;
mxp=new int *[lines];
for(int i=0;i<=lines-1;i++)
mxp[i]=new int[rows];
}
//析构函数
~Matrix()
{
for(int i=lines-1;i>=0;i--)
delete[] mxp[i];
delete[] mxp;
}
//拷贝构造函数
Matrix(const Matrix& mx)
{
//传入数组大小
lines=mx.lines;
rows=mx.rows;
//申请数组空间
mxp=new int *[lines];
for(int i=0;i<=lines-1;i

需要修改的地方:
1,Matrix operator+(Matrix& m1,Matrix& m2)中,临时变量temp的定义修改为Matrix temp(m1.get_line(),m1.get_row());
因为需要给定同样的大小,而不是默认的,那会是0,0。
2,主函数中使用Matrix mtrx3(mtrx1+mtrx2);定义相加结果,这样才是调用拷贝构造函数构造,如果使用原来的方法,需要重载操作符 = ,这个不列出了,这个和拷贝构造函数差不太多。

1.操作符重载函数里面
Matrix temp; //没有传递 行列数 导致初始化出错
2.mtrx3=mtrx1+mtrx2;//运行这行的时候
缺少‘=‘ 好操作符
Matrix& operator = (const Matrix& m)
{
for(int i=0;i<=lines-1;i++)
for(int j=0;j<=rows-1;j++)
set_elmt(i,j,m.get_elmt(i,j));
return *this;
}

注意:

int get_elmt(int i,int j){return mxp[i][j];}
修改为:
int get_elmt(int i,int j)const{return mxp[i][j];}