【id:341】【20分】D. 两个矩阵相乘(运算符重载)
题目描述
定义一个矩阵类MyMatrix,并且在类中进行运算符重定义,用*实现2个矩阵相乘。要求必须对运算符进行重载,如果用函数如multiply(matrix,matrix)去实现矩阵之间的运算一律记0分。
输入
第一行输入矩阵的阶数n,即矩阵是一个n*n的矩阵;
第二行开始依次输入2个矩阵.
输出
2个矩阵相乘的结果
#include<iostream>
using namespace std;
class MyMatrix
{
public:
int a[10][10];
int a1[10][10];
int n;
MyMatrix() {};
MyMatrix(int ma[10][10],int n):n(n)
{
for (int i = 0; i < n; i++)//行
{
for (int j = 0; j < n; j++)//列
{
a[i][j]=ma[i][j];
}
}
}
MyMatrix operator*(MyMatrix& p1)
{
for (int i = 0; i < n; i++)//行
{
for (int j = 0; j < n; j++)//列
{
int sum = 0;
for (int k = 0; k < n; k++)
{
sum = a[i][k] * p1.a[k][j] + sum;
}
a1[i][j] = sum;
}
}
return p1;
}
void print()
{
for (int i = 0; i < n; i++)//行
{
for (int j = 0; j < n; j++)//列
{
cout<< a1[i][j];
if (j == n - 1 && i!=n-1)
{
cout << endl;
}
else
{
cout << " ";
}
}
}
}
};
int main()
{
int n = 0;
cin >> n;
int ma[10][10];
for (int i = 0; i < n; i++)//行
{
for (int j = 0; j < n; j++)//列
{
cin >> ma[i][j];
}
}
int ma1[10][10];
for (int i = 0; i < n; i++)//行
{
for (int j = 0; j < n; j++)//列
{
cin >> ma1[i][j];
}
}
MyMatrix p1(ma,n);
MyMatrix p2(ma1,n);
p1* p2;
p1.print();
return 0;
}