任务描述
本关任务:设计一个矩阵类,并实现简单的矩阵运算。
相关知识
完成本关需要具备的知识介绍请参见第一、二关卡。
编程要求
在右侧编辑器中的Begin-End
之间补充代码,设计一个矩阵类( Matrix ),并实现矩阵的简单运算,具体要求如下:
-
成员变量:这一部分学员可以自由发挥,但要求都是私有成员。
-
成员函数:
-
构造函数:
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_1_1_1_
-
-
普通函数:
-
Matrix operator+(Matrix &m1,Matrix &m2)
函数,重载Matrix
类的加法运算符,实现矩阵的加法运算。 -
Matrix operator-(Matrix &m1,Matrix &m2)
函数,重载Matrix
类的减法运算符,实现矩阵的减法运算。 -
Matrix operator*(Matrix &m1,Matrix &m2)
函数,重载Matrix
类的乘法运算符,实现矩阵的乘法运算。 -
头文件展示
-
-
#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; };
源文件展示
-
#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(); }