重载操作符

ericming200409 2009-08-12 08:05:04
我定义了矩阵类如下,重载了+法操作,但是问题如注释所示,应该怎么改呢:
template<class T>
class Matrix
{
private:
unsigned rows;
unsigned cols;
T **p;
public:
Matrix():rows(0),cols(0){p=NULL;}
Matrix(unsigned r,unsigned c);
~Matrix();

Matrix<T> Reverse(); //矩阵转置
T* operator [](unsigned i); //矩阵的下标访问
Matrix<T> operator +(const Matrix<T> &a); //矩阵相加
Matrix<T> operator *(const Matrix<T> &a); //矩阵相乘
Matrix<T> operator =(const Matrix<T> &a); //矩阵赋值
template <class Type > friend ostream& operator <<(ostream & os,const Matrix<Type> & a); //重载输出操作符
};


template <class T>
Matrix<T> Matrix<T>:: operator +(const Matrix<T> &a)
{
if(rows==a.rows && cols==a.cols)
{
Matrix<T> matrix(a.rows,a.cols);
for(int i=0;i<matrix.rows;i++)
for(int j=0;j<matrix.cols;j++)
{
matrix.p[i][j]=(a.p[i][j])+p[i][j];
}
return matrix; //返回局部对象matrix,而matrix有指针成员,一旦退出函数,会调用matrix的析
//构函数从而释放指针成员占的内存,进而导致错误,请问我应该怎么改,或者有其他更好的实现,希望能给出代码,谢谢
}
}
...全文
54 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericming200409 2009-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
又写漏了一点,不好意思+_+
Matrix(const Matrix &c);

返回的临时对象是依靠拷贝构造函数产生的,搞定这个函数内的内存分配就ok了^_^
[/Quote]
谢谢,非常谢谢这位大哥,听君一言茅塞顿开
mstlq 2009-08-12
  • 打赏
  • 举报
回复
又写漏了一点,不好意思+_+
Matrix(const Matrix &c);

返回的临时对象是依靠拷贝构造函数产生的,搞定这个函数内的内存分配就ok了^_^
mstlq 2009-08-12
  • 打赏
  • 举报
回复
请再重载一个拷贝构造函数,注意好内存分配^_^
Matrix(Matrix &c);

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧