CMatrix类设计与实现(C++第一次实验)
1、构造函数:
1.1 构造函数的概念
相对于C语言来说,C++有一个比较好的特性就是构造函数,即类通过一个或者几个特殊的成员函数来控制其对象的初始化过程。构造函数的任务,就是初始化对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。
1.2 CMatrix(): 不带参数的构造函数
代码:
CMatrix::CMatrix() : m_nRow(0), m_nCol(0), m_pData(0) //无参构造函数
{
}
需要注意的是CMatrix::CMatrix() : m_nRow(0), m_nCol(0), m_pData(0)和CMatrix(){
m_nRow=0,m_nCol=0,m_pData=0}效果一致,但是前一种相对构建速度会快一点。
1.3 CMatrix(int nRow, int nCol, double *pData=NULL) : 带行、列及数据指针等参数的构造函数,并且参数带默认值
代码:
CMatrix::CMatrix(int nRow, int nCol, double* pData) : m_pData(0) // 带有三个参数的构造函数
{
Create(nRow, nCol, pData); //调用新建类对象方法
}
1.4 CMatrix(const char * strPath): 带文件路径参数的构造函数
CMatrix::CMatrix(const char* strPath)
{
m_pData = 0;
m_nRow = m_nCol = 0;
ifstream cin(strPath);
cin >> *this;
}
注意:
ofstream: 写操作(输出)的文件类 (由ostream引申而来)
ifstream: 读操作(输入)的文件类(由istream引申而来)
fstream: 可同时读写操作的文件类 (由iostream引申而来)
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间
1.5 CMatrix(const CMatrix& m): 拷贝构造函数
代码:
CMatrix::CMatrix(const CMatrix & m) : m_pData(0) //带有一个参数为对象的构造函数
{
*this = m;
}
什么是拷贝构建函数呢?
复制构造函数是构造函数的一种,也称拷贝构造函数,它只有一个参数,参数类型是本类的引用。
复制构造函数的参数可以是 const 引用,也可以是非 const 引用。
一般使用前者,这样既能以常量对象(初始化后值不能改变的对象)作为参数,也能以非常量对象作为参数去初始化其他对象。一个类中写两个复制构造函数,一个的参数是 const 引用,另一个的参数是非 const 引用,也是可以的。
2、析构函数
概念
析构函数(destructor)是成员函数的一种,它的名字与类名相同,但前面要加~,没有参数和返回值。
一个类有且仅有一个析构函数。如果定义类时没写析构函数,则编译器生成默认析构函数。如果定义了析构函数,则编译器不生成默认析构函数。
析构函数在对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作。
2.1 ~CMatrix(): 调用Release();
CMatrix::~CMatrix()
{
Release();
}
3、CMatrix对象方法
3.1 对象初始化:bool CMatrix::Create(int nRow, int nCol, double* pData)
bool CMatrix::Create(int nRow, int nCol, double* pData)
{
Release();
m_pData = new double[nRow * nCol];
m_nRow = nRow;
m_nCol = nCol;
if (pData)
{
memcpy(m_pData, pData, nRow * nCol * sizeof(double));
//memcpy内存拷贝函数,从pData中拷贝nRow * nCol * sizeof(double)个字节的内容到m_pData中
}
}
3.2 对象销毁:Release()
void CMatrix::Release()
{
if