矩阵运算(运算符重载)

任务描述

本关任务:设计一个矩阵类,并实现简单的矩阵运算。

相关知识

完成本关需要具备的知识介绍请参见第一、二关卡。

矩阵运算参考资料 

编程要求

在右侧编辑器中的Begin-End之间补充代码,设计一个矩阵类( Matrix ),并实现矩阵的简单运算,具体要求如下:

  1. 成员变量:这一部分学员可以自由发挥,但要求都是私有成员。

  2. 成员函数:

    • 构造函数:Matrix(int r,int c),参数 r 和 c 分别代表矩阵的行和列。

    • 全部设值函数:void Fill(int value),函数将矩阵内所有的元素都设置为参数 value 的值。

    • 指定位置设值函数:void Set(int r,int c,int value),函数将矩阵第 r 行 c 列的元素设置为 value 的值。

    • 获取元素函数:int Get(int r,int c)函数,函数返回矩阵第 r 行 c 列的元素。

    • 打印函数:void Print(),函数按照矩阵的形状打印出矩阵内容,每一个值后跟着一个空格。比如一个2x4元素全为1的矩阵,打印结果为(更明显表示格式,空格均用下划线_代替):

       
          
      1. 1_1_1_1_
      2. 1_1_1_1_
  3. 普通函数:

    • Matrix operator+(Matrix &m1,Matrix &m2)函数,重载Matrix类的加法运算符,实现矩阵的加法运算。

    • Matrix operator-(Matrix &m1,Matrix &m2)函数,重载Matrix类的减法运算符,实现矩阵的减法运算。

    • Matrix operator*(Matrix &m1,Matrix &m2)函数,重载Matrix类的乘法运算符,实现矩阵的乘法运算。

    • 头文件展示

  4. #pragma once
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Matrix{
        //声明友元函数
        friend Matrix operator+(Matrix& m1, Matrix& m2) ;
        friend Matrix operator-(Matrix& m1, Matrix& m2) ;
        friend Matrix operator*(Matrix& m1, Matrix& m2) ;
    
    public:
        //构造函数
        Matrix(int r, int c) {
            m_row = r;
            m_col = c;        
        }
    
        //全部设值函数
        void Fill(int value) {
            for (int i = 0; i < m_row; i++) {
                for (int j = 0; j < m_col; j++) {
                    arr[i][j] = value;
                }
            }
        }
    
        //指定位置设值函数
        void Set(int r, int c, int value) {
            arr[r][c] = value;
        }
    
        //获取元素函数
        int Get(int r, int c) {
            return arr[r][c];
        }
    
        //打印函数
        void Print() {
            for (int i = 0; i < m_row; i++) {
                for (int j = 0; j < m_col; j++) {
                    cout << arr[i][j] << " ";
                }
                cout << endl;
            }
        }
    //私有化成员变量
    private:
        int m_row;
        int m_col;
        int arr[10][10]={0};
    };
    
    //运算符重载全局函数
    Matrix operator+(Matrix& m1, Matrix& m2){
        Matrix p(m1.m_row,m1.m_col);
        p.Fill(0);
        for (int i = 0; i < m1.m_row; i++) {
            for (int j = 0; j < m1.m_col; j++) {
                p.Set(i, j, m1.Get(i, j) + m2.Get(i, j));
            }
        }
        return p;
    };
    
    Matrix operator-(Matrix& m1, Matrix& m2) {
        Matrix p(m1.m_row, m1.m_col);
        p.Fill(0);
        for (int i = 0; i < m1.m_row; i++) {
            for (int j = 0; j < m1.m_col; j++) {
                p.Set(i, j, m1.Get(i, j) - m2.Get(i, j));
            }
        }
        return p;
    };
    
    Matrix operator*(Matrix& m1, Matrix& m2) {
        Matrix p(m1.m_row, m2.m_col);
        p.Fill(0);
        for (int i = 0; i < m1.m_row; i++) {
            for (int j = 0; j < m2.m_col; j++) {
                for (int k = 0; k < m1.m_col; k++) {
                    p.arr[i][j] += m1.arr[i][k] * m2.arr[k][j];
                }
            }
        }
        return p;
    };

    源文件展示

  5. #include "usr.h"
    int main()
    {
    	int i,j;
    	cin >> i >> j;
        Matrix m1(i,j),m2(i,j),m3(j,i);
        m1.Fill(1);
        m2.Fill(2);
    	m3.Fill(0);
        for(int s = 0 ; s < i ; s++){
    		for(int c = 0 ; c < j ; c++){
    			if(s==c)
    				m3.Set(s,c,s+1);
    		}
        }
    	//m1.Print();
        //m2.Print();
        //m3.Print();
    	cout << "m1 + m2 :" << endl ;
        (m1 + m2).Print();
    	cout << "m1 - m2 :" << endl ;
        (m1 - m2).Print();
    	cout << "m1 * m3 :" << endl ;
        (m1 * m3).Print();
        
    }
    

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值