📄 matrix.html
字号:
//----------------------------------------------------------------------<br>
//返 回:矩阵类对象指针<br>
//----------------------------------------------------------------------<br>
//编 者:耿 楠<br>
//----------------------------------------------------------------------<br>
//最后编改:2002年10月18日<br>
////////////////////////////////////////////////////////////////////////</font><br>
CMatrix::CMatrix(<font color="#0000FF">int</font> RowNumber,
<font color="#0000FF">int</font> ColumnNumber)<br>
{</p>
<blockquote>
<p style="margin-top: 0px; margin-bottom: 0px">//为矩阵元素分配内空间<br>
data = <font color="#0000FF">new</font> TYPE[RowNumber*ColumnNumber];<br>
//为行数赋值<br>
<font color="#0000FF">this</font>->RowNumber = RowNumber;<br>
//为列数赋值<br>
<font color="#0000FF">this</font>->ColumnNumber = ColumnNumber;</p>
</blockquote>
<p style="margin-top: 0px; margin-bottom: 0px">}</p>
</blockquote>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
<font face="宋体" size="3">
这里动态生成了一个二维数组内存堆,用于存储矩阵数据,数组类型已定义为double型。当然,在析构函数中一定要要释放堆空间。</font></p>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
另外还定义了<font face="宋体" size="3">无参构造函数CMatrix()用以生成一个空的矩阵对象,拷贝构造函数CMatrix(CMatrix&
Matrix)用以完成矩阵的拷贝</font><font face="宋体">。</font></p>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
<b><font face="宋体" size="3">D.2.2 </font></b>
<font face="宋体" size="3"><b><font color="#0000FF">operator</font>[]操作符的重载</b></font></p>
<blockquote>
<p style="margin-top: 0px; margin-bottom: 0px">
<font color="#008000">
////////////////////////////////////////////////////////////////////////<br>
//操作符重载operator[]()<br>
//----------------------------------------------------------------------<br>
//基本功能:用于重载操作符[],允许用Matrix[i][j]的形式直接对矩阵的元素进<br>
// 操作。<br>
//----------------------------------------------------------------------<br>
//参数说明:int Row 矩阵元素的下标<br>
//----------------------------------------------------------------------<br>
//返 回:指定矩阵元素的值,为TYPE型。<br>
//----------------------------------------------------------------------<br>
//编 者:耿 楠<br>
//----------------------------------------------------------------------<br>
//最后编改:2002年10月18日<br>
////////////////////////////////////////////////////////////////////////</font><br>
TYPE* CMatrix::operator[](int Row)<br>
{</p>
<blockquote>
<p style="margin-top: 0px; margin-bottom: 0px">
<font color="#0000FF">return</font> &(data[ColumnNumber*Row]);</p>
</blockquote>
<p style="margin-top: 0px; margin-bottom: 0px">}</p>
</blockquote>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
<font face="宋体" size="3">这个函数返回一个指针,它的作用是允许我们用Matrix[i][j]的形式直接操作矩阵中的某个元素。这种写法显然比Matrix.data[i
* ColumnNumber + j]的形式来的直观。</font></p>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 150%">
<b><font face="宋体" size="3">D.2.3 </font></b>
<font face="宋体" size="3"><b><font color="#0000FF">operator </font>
*操作符的重载</b></font></p>
<blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
<font color="#008000">
////////////////////////////////////////////////////////////////////////<br>
//操作符重载operator*()<br>
//----------------------------------------------------------------------<br>
//基本功能:用于重载操作符*,用当前矩阵乘上另一个矩阵,得到一个新矩阵。<br>
//----------------------------------------------------------------------<br>
//参数说明:CMatrix& Other 另一个矩阵<br>
//----------------------------------------------------------------------<br>
//返 回:CMatrix 一个新矩阵。<br>
//----------------------------------------------------------------------<br>
//编 者:耿 楠<br>
//----------------------------------------------------------------------<br>
//最后编改:2002年10月18日<br>
////////////////////////////////////////////////////////////////////////</font><br>
CMatrix CMatrix::<font color="#0000FF">operator</font> *(CMatrix
&Num2)<br>
{</p>
<blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
<font color="#0000FF">int</font> RetRow, RetColumn;<br>
<br>
<font color="#008000">//定义一个矩阵对象,并用当前矩阵的行数和列数对RetRow和//RetColumn赋值</font><br>
CMatrix RetValue(RetRow = <font color="#0000FF">this</font>->RowNumber,RetColumn
= Num2.GetColumnNumber());<br>
<br>
<font color="#008000">//用0对新矩阵进行初始化</font><br>
RetValue.Fill(0);<br>
<br>
<font color="#008000">//如果当前矩阵的列数不等于传入矩阵的行数,无法进行*操作,返回//矩阵</font><br>
if(<font color="#0000FF">this</font>->ColumnNumber !=
Num2.GetRowNumber())</p>
<blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
<font color="#0000FF">return</font> RetValue;</p>
</blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
<font color="#0000FF">int</font> i, j, counter;<br>
TYPE sum;<br>
<font color="#0000FF">for</font>(i = 0; i < RetRow; i++)</p>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
{</p>
<blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
<font color="#0000FF">for</font>(j = 0; j < RetColumn; j++)<br>
{</p>
<blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
<font color="#0000FF">for</font>(sum = 0, counter = 0; counter <<font color="#0000FF">
this</font>->ColumnNumber; counter++)</p>
<blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
sum += (*<font color="#0000FF">this</font>)[i][counter] *
Num2[counter][j];</p>
</blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
RetValue[i][j] = sum;</p>
</blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
}<br>
</p>
</blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
}<br>
<br>
<font color="#008000">//返回新矩阵的指针</font><br>
<font color="#0000FF">return</font> RetValue;</p>
</blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; ">
}</p>
</blockquote>
<p style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 150%">
<font face="宋体" size="3">
这个函数将当前矩阵中的各行元素与传入矩阵的各列中对应元素相乘再对其累加求各,作为新元素值,以完成两矩阵的乘运算,它返回一个指向结果矩阵的指针。其作用是允许用</font></p>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
<font face="宋体" size="3">Matrix3 = Matrix1 * Matrix2的形式实现两个矩阵的相乘。</font></p>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
该矩阵类中其它函数的作用与此类似请大家自行分析。</p>
<p style="line-height: 150%; margin-top: 10px; margin-bottom: 10px">
<b><font face="宋体" size="5"><a name="003"></a>D.3 CMatrix矩阵类的使用</font></b></p>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
<font face="宋体" size="3"> 为方便大家学习,在此提供<a href="../../Download/CMatrix.zip">CMatrix类</a>下载。</font></p>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
<b><font face="宋体" size="3">D.3.1 将</font><font face="宋体">CMatrix类加入工程</font></b></p>
<p style="line-height: 150%; margin-top: 0px; margin-bottom: 0px">
<font face="宋体" size="3">下载CMatrix类的ZIP包解压缩后会得到两个文件Matrix.h和Matrix.cpp,并将它们拷贝到当前工程目录中。然后用以下方法将CMatrix类添加到工程中:</font></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%">
<font face="宋体" size="3"> 1.如图所示选择Project→Add To
Project→Files...菜单</font></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="center">
<img src="images/image001.gif" border="0" width="444" height="179"></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
<font face="宋体" size="3"> 2.打开如图所示的文件选择对话框</font></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="center">
<img border="0" src="images/image002.gif" width="444" height="295"></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
<font face="宋体" size="3"> 3.选择对话框Matrix.h和Matrix.cpp两个文件,单击OK,便可将CMatrix类添加到工程中。</font></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
<font face="宋体" size="3"> 添加CMatrix类后的类结构如图所示:</font></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="center">
<img border="0" src="images/image003.gif" width="160" height="145"></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
<font face="宋体" size="3"> </font></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
<b><font face="宋体" size="3">D.3.2 </font><font face="宋体">包含头文件Matrix.h</font></b></p>
<p style="MARGIN-TOP: 6px; MARGIN-BOTTOM: 6px; LINE-HEIGHT: 150%" align="left">
<font face="宋体" size="3"> 将CMatrix类添加到工程后,还需将类定义头文件Matrix.h包含到相应的.cpp文件中才能使用它。在此</font><font face="宋体">可以用另一种简便的方法,即将</font><font face="宋体" size="3">类定义头文件Matrix.h包含到工程预编译文件stdafx.h头文件中,在stdafx.h头文件中添加以下代码:</font></p>
<blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -