- 积分
- 0
- 注册时间
- 2003-11-2
- 仿真币
-
- 最后登录
- 1970-1-1
|
我自己定义了一个矩阵类,其功能实现矩阵运算。
矩阵类的头文件如下:
class CMatrix : public CObject
{
DECLARE_SERIAL(CMatrix)
//attributes
private:
int rows,cols; //行和列
double * elems; //存储矩阵元素值
//implementation
public:
CMatrix();
virtual ~CMatrix();
CMatrix(int,int);
CMatrix(CMatrix &matrix);
//storing
virtual void Serialize(CArchive &ar);
//operation
public:
......//省略一些函数
//实现动态赋值 //此函数会改变矩阵类行和列,矩阵所分配的内存也会发生变化
CMatrix &equal(CMatrix mat);
};
矩阵类的cpp文件如下:
#include "Matrix.h"
IMPLEMENT_SERIAL(CMatrix,CObject,1)
CMatrix::CMatrix()
{
this->rows=1;
this->cols=2;
this->elems=new double[rows*cols];
for (int i=0;i<rows*cols;i++)
elems=0.0;
}
CMatrix::~CMatrix()
{
delete []elems;
}
CMatrix::CMatrix(int rows,int cols)
{
CMatrix::rows=rows;
CMatrix::cols=cols;
elems=new double[rows*cols];
for (int i=0;i<rows*cols;i++)
elems=0.0;
}
///////////////////////////////////////////////////////
//storing 我写的序列化函数,请帮忙看看错误在那?
void CMatrix::Serialize(CArchive &ar)
{
CObject::Serialize(ar);
//
int i;
if(ar.IsStoring())
{
ar<<rows<<cols;
for(i=0;i<rows*cols;i++)
ar<<elems;
}
else
{
ar>>rows>>cols;
for(i=0;i<rows*cols;i++)
ar>>elems;
}
}
//此函数会改变矩阵类行和列,矩阵所分配的内存也会发生变化
CMatrix &CMatrix::equal(CMatrix mat)
{
delete []elems;
rows=mat.GetRows();
cols=mat.GetCols();
elems=new double[rows*cols];
for (int i=0;i<rows*cols;i++)
elems=mat.elems;
return *this;
}
以上是定义的矩阵类。
在我的工程(SimMount)当中,文档类(CSimMountDoc)中有一个矩阵类数据,文档类的
头文件如下:
class CSimMountDoc : public CDocument
{
public:
CMatrix m_matEnergy;//我的矩阵类型数据
//其余函数省略
}
文档类的CPP文件如下:
CSimMountDoc::CSimMountDoc():m_matEnergy(6,6)//在这里对我的矩阵类型数据进行了初始化,不知道有没有错误?,还是应该放在OnNewDocument()中初始化?
{
}
BOOL CSimMountDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
void CSimMountDoc::Serialize(CArchive& ar)
{
m_matEnergy.Serialize(ar);
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
//在下面这个函数中是否应该把m_matEnergy里面的指针元素给清除掉?
//这里面应该怎样编写程序?
void CSimMountDoc:eleteContents()
{
// TODO: Add your specialized code here and/or call the base class
CDocument::DeleteContents();
}
这个矩阵数据m_matEnergy开始初始化时,为六行六列的一个矩阵,但在软件运行后,在不同情况下,他的行和列都可能发生改变,从而矩阵所申请的内存也会发生改变(通过矩阵类的成员函数:CMatrix::equal(CMatrix mat)来改变)。不知道这个类怎么串行化?这个类在什么地方初始化?CSimMountDoc::DeleteContents()这个函数中是不是应该消除矩阵申请的内存?因为执行 菜单/打开或新建 时会调用CSimMountDoc::DeleteContents()这个函数。
希望各位高手给与指导,将十分感谢! |
|