首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

局部变量作为返回值 动态分配空间有关问题

2012-04-23 
局部变量作为返回值 动态分配空间问题#includeiostreamusing namespace stdclass SparseMatrixostream

局部变量作为返回值 动态分配空间问题
#include<iostream>
using namespace std;
class SparseMatrix;
ostream&operator<<(ostream&os,SparseMatrix&s);
class MatrixTerm//矩阵的项
{
public:
MatrixTerm(int r=0,int c=0,int v=0):row(r),col(c),value(v)
{
}
  friend ostream& operator<<(ostream&os,SparseMatrix&s);
friend class SparseMatrix;
private:
int row,col,value;
};
class SparseMatrix//矩阵
{
public:
void operator =(SparseMatrix &s)
{
for(int i=0;i<s.terms;i++)
this->NewTerm(s.smArray[i].row,s.smArray[i].col,s.smArray[i].value);
}
  friend ostream& operator<<(ostream&os,SparseMatrix&s);
SparseMatrix(int r=0,int c=0,int t=0):rows(r),cols(c),terms(t)
{
smArray=new MatrixTerm[20];

}
SparseMatrix(SparseMatrix &s)
{
rows=s.rows;cols=s.cols;terms=0;
smArray=new MatrixTerm[20];
for(int i=0;i<s.terms;i++)
this->NewTerm(s.smArray[i].row,s.smArray[i].col,s.smArray[i].value);
}
void NewTerm(int r,int c,int v)
{
if(r<=rows&&c<=cols)
{
smArray[terms]=MatrixTerm(r,c,v);
terms++;
}
else
cout<<"row or col is over the set"<<endl;
}
~SparseMatrix()
{
cout<<"调用析构函数"<<endl;
delete []smArray;
}
void Transpose()//转置
{
for(int i=0;i<terms;i++)
{
int j=smArray[i].row;
smArray[i].row=smArray[i].col;
smArray[i].col=j;
}
}
SparseMatrix Add(SparseMatrix b);//相加
SparseMatrix operator *(SparseMatrix &b)//相乘
{
SparseMatrix c(rows,b.cols);
if(cols!=b.rows)throw "incompatible matrices";
for(int i=0;i<terms;i++)
{
for(int j=0;j<terms;j++)
{
if(smArray[i].col==b.smArray[j].row&&smArray[i].row==b.smArray[j].col)
{
c.NewTerm(smArray[i].row,b.smArray[j].col,smArray[i].value*b.smArray[j].value);
}
}

}
return c;//返回时c是否已经被释放?

}

int rows,cols,terms,capacity;
MatrixTerm*smArray;
};
ostream& operator<<(ostream&os,SparseMatrix&s)
{
for(int i=0;i<s.terms;i++)
os<<"("<<s.smArray[i].row<<","<<s.smArray[i].col<<","<<s.smArray[i].value<<")"<<" ";
os<<endl;
return os;
}
int main()
{
SparseMatrix a(5,5);
a.NewTerm(3,2,2);
a.NewTerm(2,1,3);
a.NewTerm(1,2,4);
cout<<a;
a.Transpose();
cout<<a;
SparseMatrix b=a;
cout<<b;
SparseMatrix c(7,5);
c.NewTerm(2,5,5);
c.NewTerm(5,2,3);
c.NewTerm(7,3,5);
cout<<c;
SparseMatrix d(7,5);
d=c*b;
cout<<d;//为何d输出是空的?

return 0;
}


[解决办法]
跟你的局部变量作为返回值应该没有关系

是你测试数据的问题吧,这2个矩阵相乘之后的结果矩阵里,一个元素都没有。

好像你的矩阵乘法的算法也不对吧。

[解决办法]
去看看operator =(SparseMatrix &s)
怎么重载的吧

热点排行