矩阵类 重载(Matrix class overloading).doc

上传人:scccc 文档编号:11187151 上传时间:2021-07-11 格式:DOC 页数:24 大小:48.50KB
返回 下载 相关 举报
矩阵类 重载(Matrix class overloading).doc_第1页
第1页 / 共24页
矩阵类 重载(Matrix class overloading).doc_第2页
第2页 / 共24页
矩阵类 重载(Matrix class overloading).doc_第3页
第3页 / 共24页
矩阵类 重载(Matrix class overloading).doc_第4页
第4页 / 共24页
矩阵类 重载(Matrix class overloading).doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《矩阵类 重载(Matrix class overloading).doc》由会员分享,可在线阅读,更多相关《矩阵类 重载(Matrix class overloading).doc(24页珍藏版)》请在三一文库上搜索。

1、矩阵类 重载(Matrix class overloading)Assignment operations and function call operators () to transpose the matrix, add, subtract, multiply, and find negative - must deal with various exceptions(cross bounds, subscript errors, mismatches, etc.) and then write the main function for a thorough test. */*/#in

2、clude#include /getch prototypeUsing namespace std;/ / space application exception classClass Wrongmem;/ / exception class.Class Outofrange;/ / definition error exception classClass Differ;/* matrix class began */Const int MAX_SIZE=1000;TemplateClass MatrixPublic:Two / / constructor parametersMatrix

3、(int, R, int, c): rows (R), cols (c)If (rowsMAX_SIZE|rowsMAX_SIZE|colsMAX_SIZE|rowsMAX_SIZE|cols1), throw, Outofrange ();If (size & & sizesizeof (rows*cols) /sizeof (int) throw (Outofrange);Mem=new T rows*cols;If (mem=NULL), throw, Wrongmem ();For (int i=0; irows*cols; i+)Memi=datai;/ / destructorMa

4、trix (delete MEM) ;T, setrows (), constreturn, rows;T, setcols (), constreturn, cols;/ / modify matrixVoid setMatrix (T, *data, int, size);Void setMatrix (T *data);/ / overloaded function call operator ()T, &operator () (int, I, int, J);/ / copy constructorMatrix (const, Matrix, &x);/ / overloaded a

5、ssignment operatorMatrix operator= (Matrix &x);Transpose / / heavy!Matrix operator! ();/ / + overloadingMatrix operator+ (const, Matrix, &x);/ / - heavyMatrix operator- (const, Matrix, &x);* / / heavyMatrix operator* (const, Matrix, &x);For the negative - / / heavyMatrix, operator- ();Private:T *mem

6、;Const, int, rows, cols;/* function */ / modify matrixTemplate Void Matrix: setMatrix (T, *data, int, size)If (rows*colssize), throw, Outofrange ();For (int i=0; isize; i+)Memi=datai;TemplateVoid Matrix: setMatrix (T, *data)For (int i=0; irows*cols; i+)Memi=datai;/ / overloaded function call operato

7、r ()Template T &Matrix: Operator () (int, I, int, J)If (i=rows|j=cols), throw, Outofrange ();Else return memi*cols+j;/ / input operator overloadingTemplateIstream &operator (istream, &in, Matrix, &x)For (int i=0; ix.setrows (); i+)For (int j=0; jx (I, J);Return in;The output / loadTemplate Ostream &

8、operator (ostream, &out, Matrix, &x)For (int i=0; ix.setrows (); i+)For (int j=0; jx.setcols (); j+)Outx (I, J) ;Outendl;Outendl;Return out;/ / copy constructorTemplate Matrix: Matrix (const, Matrix, &x): rows (x.rows), cols (x.cols)Mem=new T rows*cols;If (mem=NULL), throw, Differ ();ElseFor (int i=

9、0; ix.rows*x.cols; i+)Memi=x.memi;/ /重载附值运算符=模板矩阵如果(行)!= x.rows | |列!= x.cols)把differ();如果(这个)!= x)删除 ;MEM =新行*列;如果(MEM = = null)把wrongmem();其他的为(int i = 0;i x.rows * x.cols;i+)MEM 我 = x.mem 我;返回*;/ /重载转置!模板矩阵!()矩阵温度(列、行);为(int i = 0;i 列;i+)为(int = 0;j 行;j + +)温度(i,j)=(*)(j,i);回复;/ /重载+模板矩阵矩阵:操作符+(常

10、量矩阵和X)int i;如果(行)!= x.rows | |列!= x.cols)把differ();矩阵(*此);如果(行= = x.rows &列= = x.cols)为(i = 0;i 行*列;i+)温度。MEM 我 = MEM 我 + x.mem 我;回复;别人把differ();/ /重载模板矩阵矩阵:操作符(常量矩阵和X)int i;如果(行)!= x.rows | |列!= x.cols)把differ();矩阵(*此);如果(行= = x.rows &列= = x.cols)为(i = 0;i # 3/ /重载矩阵乘法运算符*模板矩阵矩阵:操作符*(常量矩阵和X)如果(列!=

11、x.rows)把differ();矩阵温度(行,x.cols);为(int = i 0;i 行;i + +)为(j = 0;J x.cols;j+)温度(i,j)0;为(int k = 0;Kx.rows;K + +)温度(I,J)+ = MEM 我 *一+ K x.mem k x.cols +;回复;/ /重载求负模板矩阵矩阵(*此);为(int i = 0;i 行*列;i+)临时文件(= 1)*;回复;/ *主函数开始* /无效main()尝试1 /矩阵的行和列必须在和max_size之间矩阵 M0(0,3);捕捉()cout “执行语句矩阵 M0(0,3);导致矩阵的大小错误!“n”;尝

12、试1 /矩阵的行和列必须在和max_size之间矩阵最大(max_size + 1,3);捕捉()cout “执行语句矩阵最大(“ max_size + 1“,3);导致矩阵的大小错误!“n”;cout endl;3 / 3定义行列的空矩阵M1矩阵 M1(3,3);cout 输入矩阵CIN M1;/ /利用已重载的输出运算符输出矩阵cout “矩阵M1(3,3):n” M1;/ /利用拷贝构造函数构造矩阵M2(3行3列)矩阵 m2(M1);cout “M2(M1):n”平方米;int = 9,8,7,6,5,4,3,2,1 ;/ *定义3行3列的空矩阵M3,并用数组一进行初始化* * * *

13、*等价于下述语句:*矩阵(3,3,M3,sizeof(A)/ sizeof(int);* *构造函数的最后一个参数为数组的长度,默认值为0 * *当数组长度参数非0时将进行数组长度和矩阵元素个数的匹配检查!* * /矩阵 M3(3,3,A);cout “矩阵 M3(3,3,A):n” M3;M3 = - M1;/ /求负(矩阵所有元素取相反值)court matrix m = m1: n m;m = m1 = m1; / / 与c + + 一样允许连续赋值!court matrix m = m1 = m1: n m;court endl;court 按任意键继续. n;getch ();cou

14、rt endl;/ / 矩阵转置, 等价于: m2 = m1.transpose ();m2 =! m1;court matrix m2 =! m1: n m2;m2.setmatrix (a); / / 用数组a修改矩阵m2各元素的值court matrix m2.setmatrix (a) n m2;m2 = m1 + m1; / / 矩阵加court matrix m2 = m1 + m1: n m2;m = m1 * m2; / / 矩阵乘court matrix m = m1 * m2: n m;m3 = m3 m2; / / 矩阵减court matrix m = m3 m2: n

15、 m;court endl;court 按任意键继续. n;getch ();court endl;matrix m4 (4,5), m5 (5.4);/ / 利用已重载的运算符 () 直接给矩阵m4赋值for (int i = 0; i m4.setrows (); + + i)for (int j = 0; j m4.setcols (); j + +)m4 (i, j) = (i + 1) * (j + 1);court matrix m4: n m4.try / / m4矩阵空间大于存放矩阵m3所有元素的空间m4 = m3;court matrix m4 = m: n m4./ / 允

16、许元素个数不相同的矩阵进行赋值!/ / 只要求目标矩阵的容量足够存放源矩阵的所有元素就允许赋值!catch (.) court n执行语句m4 = m3; 导致矩阵的大小错误异常! n n ;/ / 不允许元素个数不相同的矩阵进行赋值时输出该信息!int b = 0,1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1,0;/ / 用数组b修改矩阵m4各元素的值, 同时进行个数匹配检查m4.setmatrix (b, sizeof (b) / sizeof (int);court m4.setmatrix (b, sizeof (b) / sizeof (int) : n m

17、4./ / 重载运算符! 实现矩阵转置, 与成员函数transpose () 功能一致!m5 =! m4.court matrix m =! m4: n m5.court endl;court 按任意键继续. n;getch ();court endl;court matrix m4 m5 *,: n m5 * m4; / / 矩阵乘court matrix m4 * m5: n m4 * m5; / / 矩阵乘court endl;try / / 第1个矩阵的列数不等于第2个矩阵的行数court m4 * m4.catch (.) court 执行语句cout m4 * m4; 导致矩阵的大

18、小 (不匹配) 错误异常! n ;try / / 超过矩阵m4的最大行、列数for (i = 0; i = m4.setrows (); + + i)for (int j = 0; j = m4.setcols (); + + j)m4 (i, j) = (i + 1) * (j + 1);catch (.) court 执行上述程序段将导致下标 (访问) 越界异常! n n ;try / / 数组长度不足于给矩阵m4的所有元素赋值m4.setmatrix (a, sizeof (a) / sizeof (int);catch (.) court 执行语句 m4.setmatrix (a, s

19、izeof (a) / sizeof (int) ); 导致数组长度不足异常! n ;try / / 虽然数组b有足够的元素, 但指定的长度小于矩阵m4的元素个数m4.setmatrix (15);catch (.) court 执行语句 m4.setmatrix (15); 导致数组长度不足异常! n ;try / / m3矩阵不足于存放矩阵m4的所有元素m3 = m2.catch (.) court 执行语句m3 = m4; 导致矩阵的大小错误异常! n ;try / / 第1个矩阵的列数必须等于第2个矩阵的行数才能相乘m = m1 - m4.catch (.) court 执行语句m3 = m1 - m4; 导致矩阵的大小错误异常! n ;try / / 两个矩阵的行数和列数必须完全一致才能相加m3 = m2 + m1;catch (.) court 执行语句m3 = m4 + m3; 导致矩阵的大小错误异常! n ;try / / 两个矩阵的行数和列数必须完全一致才能相减m3 = m2 - m1.catch (.) court 执行语句m3 = m4 m1; 导致矩阵的大小错误异常! n ;court endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1