昨天作了象素的测试题,人家说我做错了#¥%◎#,请高手帮忙看一下吧~(我C++大菜)
要求:
写一个运行期指定行列的矩阵类,可做到
matrix func( matrix x , matrix y )
{
return x + y;
}
我的答案:
class Matrix
{
public:
//构造函数,根据矩阵的长和宽来创建一个矩阵
Matrix(UINT width,UINT height);
//析构函数,释放空间
~Matrix()
{
delete[] data;
}
//重载运算符,执行矩阵的加法
Matrix operator + (Matrix&,Matrix&);
//矩阵的长和宽
int width,height;
protected:
//存储矩阵数据的2维数组
int** data;
}
//构造函数
Matrix::Matrix(UINT width,UINT height)
{
this->width=width;
this->height=heigth;
//动态申请一块内存,大小为width*height*sizeof(int)
if((data=new int[width][height])==NULL)
{
//如果申请失败...
cout<<"Can't allocate memory \n";
exit(1);
}
//申请成功,执行初始化
memset(data,0,width*height*sizeof(int));
}
//重载"+"运算符
Matrix operator + (Matrix& m1,Matrix& m2)
{
//如果两个矩阵长度或宽度不一致,则不能相加,返回一个大小为0的矩阵作为失败标志
if((m1.width!=m2.width)||(m1.height!=m2.height))
return Matrix[0][0];
//两个矩阵大小一致,则创建一个大小一样的矩阵作为运算结果
Matrix m(m1.width,m1.height);
//矩阵相加
for(int i=0;i<m.width;i++)
for(int j=0;j<m.height;j++)
m[i][j]=m1[i][j]+m2[i][j];
//返回
return m;
}
人家的评价是:
您的答案看过了,但有严重的错误,当你的类对象在进行值传递时会对指针进行 bitwise方式的拷贝,导致两个对象共享同一数据区,在没有类似引用计数的机制保护之下,对象析构时必定会出错(new 了一次 delete 了两次,所以 operator = 和 拷贝构造 , 析构 是需要好好想想的)。
我C++太菜,实在不知道错在什么地方,请高手指点一下吧!谢谢!