定义一个Matrix类,实现矩阵的加法和乘法

  1 #include<iostream>
  2 using namespace std;
  3 
  4 class Matrix
  5 {
  6     int row;//矩阵的行
  7     int col;//矩阵的列
  8     int **a;//保存二维数组的元素
  9 public:
 10     Matrix();//默认构造函数
 11     Matrix(int r, int c);
 12     Matrix(const Matrix &is);//拷贝构造函数
 13     void Set();//输入矩阵元素
 14     void Madd(const Matrix &is);//矩阵加
 15     Matrix Mmul(const Matrix &is);//矩阵乘
 16     void display();//显示矩阵元素
 17 };
 18 
 19 Matrix::Matrix(int r, int c)
 20 {
 21     row = r;
 22     col = c;
 23     a = (int **)malloc(sizeof(int*)*row);
 24     for (int r = 0; r < row; r++)
 25     {
 26         *(a + r) = (int*)malloc(sizeof(int)*col);
 27     }
 28 }
 29 
 30 Matrix::Matrix(const Matrix & is)
 31 {//拷贝构造函数
 32     row = is.row;
 33     col = is.col;
 34     a = new int*[row];
 35     for (int i = 0; i < row; i++)
 36     {
 37         a[i] = new int[col];
 38     }
 39     a = is.a;
 40 }
 41 
 42 void Matrix::Set()
 43 {
 44     printf("请输入数:\n");
 45     for (int i = 0; i < row; i++)
 46         for (int j = 0; j < col; j++)
 47             cin >> a[i][j];
 48 }
 49 
 50 void Matrix::Madd(const Matrix & is)
 51 {
 52     if (row != is.row || col != is.col)//判断两矩阵是否符合相加条件
 53     {
 54         cout << "相加的矩阵必须行和列一致";
 55     }
 56     else
 57     {
 58         for (int i = 0; i < row; i++)
 59         {
 60             for (int j = 0; j < col; j++)
 61             {
 62                 a[i][j] += is.a[i][j];
 63             }
 64         }
 65     }
 66 }
 67 
 68 Matrix Matrix::Mmul(const Matrix & is)
 69 {
 70     Matrix M3(this->row, is.col);
 71     if (this->col != is.row)//判断是否符合相乘条件
 72     {
 73         cout << "不符合两矩阵相乘的条件";
 74     }
 75     else
 76     {
 77         for (int i = 0; i < M3.row; i++)
 78         {
 79             for (int j = 0; j < M3.col; j++)
 80             {
 81                 M3.a[i][j] = 0;
 82                 for (int n = 0; n < is.row; n++)
 83                 {
 84                     M3.a[i][j] += this->a[i][n] * is.a[n][j];
 85                 }
 86             }
 87         }
 88     }
 89     return M3;
 90 }
 91 
 92 void Matrix::display()
 93 {//输出矩阵
 94     for (int i = 0; i < row; i++)
 95     {
 96         for (int j = 0; j < col; j++)
 97         {
 98             cout << a[i][j] << " ";
 99         }
100         cout << endl;
101     }
102     cout << endl;
103 }
104 
105 int main()
106 {
107     Matrix m1(3, 3);
108     m1.Set();
109     m1.display();
110     Matrix m2(3, 3);
111     m2.Set();
112     m2.display();
113     Matrix m3(3, 2);
114     m3.Set();
115     m3.display();
116     cout << "m1+m2=" << endl;
117     m1.Madd(m2);
118     m1.display();
119     Matrix m4(m1.Mmul(m3));
120     cout << "m1*m3=" << endl;
121     m4.display();
122     system("pause");
123     return 0;
124 }
View Code

运行结果:

 

转载于:https://www.cnblogs.com/Alier/p/6651444.html

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值