📄 matrix.cpp
字号:
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
void CMatrix::operator +=(CMatrix& Other)
{
//两个矩阵行列数不相等,无法执行+=操作,直接返回。
if(this->RowNumber != Other.GetRowNumber() || this->ColumnNumber != Other.GetColumnNumber())
return;
int i,j;
for(i = 0; i < RowNumber; i++)
for(j = 0; j < ColumnNumber; j++)
//赋值
data[i * ColumnNumber + j] += Other[i][j];
}
////////////////////////////////////////////////////////////////////////
//操作符重载operator+()
//----------------------------------------------------------------------
//基本功能:用于重载操作符+,用当前矩阵加上另一个矩阵,得到一个新的矩阵。
//----------------------------------------------------------------------
//参数说明:CMatrix& Other 另一个矩阵
//----------------------------------------------------------------------
//返 回:CMatrix 一个新矩阵。
//----------------------------------------------------------------------
//编 者:耿 楠
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
CMatrix CMatrix::operator +(CMatrix &Other)
{
//定义一个矩阵对象
CMatrix ReturnValue(RowNumber, ColumnNumber);
//用0对新矩阵进行初始化
ReturnValue.Fill(0);
//两个矩阵行列数不相等,无法执行+操作,返回0矩阵。
if(this->RowNumber != Other.GetRowNumber() || this->ColumnNumber != Other.GetColumnNumber())
return ReturnValue;
int i, j;
for(i = 0; i < RowNumber; i++)
for(j = 0; j < ColumnNumber; j++)
//两个矩阵相加
ReturnValue[i][j] = data[i * ColumnNumber + j] + Other[i][j];
//返回新矩阵的指针
return ReturnValue;
}
////////////////////////////////////////////////////////////////////////
//操作符重载operator*()
//----------------------------------------------------------------------
//基本功能:用于重载操作符*,用当前矩阵乘上另一个矩阵,得到一个新的矩阵。
//----------------------------------------------------------------------
//参数说明:CMatrix& Other 另一个矩阵
//----------------------------------------------------------------------
//返 回:CMatrix 一个新矩阵。
//----------------------------------------------------------------------
//编 者:耿 楠
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
CMatrix CMatrix::operator *(CMatrix &Num2)
{
int RetRow, RetColumn;
//定义一个矩阵对象,并用当前矩阵的行数和列数对RetRow和RetColumn赋值
CMatrix RetValue(RetRow = this->RowNumber,RetColumn = Num2.GetColumnNumber());
//用0对新矩阵进行初始化
RetValue.Fill(0);
//如果当前矩阵的列数不等于传入矩阵的行数,无法进行*操作,返回0矩阵
if(this->ColumnNumber != Num2.GetRowNumber())
return RetValue;
int i, j, counter;
TYPE sum;
for(i = 0; i < RetRow; i++)
{
for(j = 0; j < RetColumn; j++)
{
for(sum = 0, counter = 0; counter < this->ColumnNumber; counter++)
sum += (*this)[i][counter] * Num2[counter][j];
RetValue[i][j] = sum;
}
}
//返回新矩阵的指针
return RetValue;
}
////////////////////////////////////////////////////////////////////////
//矩阵初始化Fill()
//----------------------------------------------------------------------
//基本功能:用给定的常量给矩阵各个元素赋值。
//----------------------------------------------------------------------
//参数说明:TYPE FillNumber 给定的常量。
//----------------------------------------------------------------------
//返 回:无。
//----------------------------------------------------------------------
//编 者:耿 楠
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
void CMatrix::Fill(TYPE FillNumber)
{
int i,j;
for(i = 0; i < RowNumber; i++)
for(j = 0; j < ColumnNumber; j++)
data[i * ColumnNumber + j] = FillNumber;
}
////////////////////////////////////////////////////////////////////////
//生成单位矩阵MakeUnit()
//----------------------------------------------------------------------
//基本功能:生成一个对角元素值为1的方阵。
//----------------------------------------------------------------------
//参数说明:无。
//----------------------------------------------------------------------
//返 回:无。
//----------------------------------------------------------------------
//编 者:耿 楠
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
void CMatrix::MakeUnit()
{
//行数和列数不相等,无法进行操作,返回
if(RowNumber != ColumnNumber)
return;
int i;
for(i = 0; i < RowNumber; i++)
//给各对角元素赋值为1
(*this)[i][i]=1.;
}
////////////////////////////////////////////////////////////////////////
//返回矩阵的列数GetColumnNumber()
//----------------------------------------------------------------------
//基本功能:返回矩阵的列数。
//----------------------------------------------------------------------
//参数说明:无。
//----------------------------------------------------------------------
//返 回:int 矩阵的列数。
//----------------------------------------------------------------------
//编 者:耿 楠
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
int CMatrix::GetColumnNumber()
{
return ColumnNumber;
}
////////////////////////////////////////////////////////////////////////
//返回矩阵的行数GetColumnNumber()
//----------------------------------------------------------------------
//基本功能:返回矩阵的行数。
//----------------------------------------------------------------------
//参数说明:无。
//----------------------------------------------------------------------
//返 回:int 矩阵的行数。
//----------------------------------------------------------------------
//编 者:耿 楠
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
int CMatrix::GetRowNumber()
{
return RowNumber;
}
////////////////////////////////////////////////////////////////////////
//调试转储Dump()
//----------------------------------------------------------------------
//基本功能:用于调试的转储函数。
//----------------------------------------------------------------------
//参数说明:无。
//----------------------------------------------------------------------
//返 回:无。
//----------------------------------------------------------------------
//编 者:耿 楠
//----------------------------------------------------------------------
//最后编改:2002年10月18日
////////////////////////////////////////////////////////////////////////
void CMatrix::Dump()
{
#ifdef _DEBUG
int i, j;
for(i = 0; i < RowNumber; i++)
{
for(j = 0; j < ColumnNumber; j++)
TRACE("%f ", data[i * ColumnNumber + j]);
TRACE("\n");
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -