题目描述 定义一个矩阵类MyMatrix,并且在类中进行运算符重定义,用实现矩阵相乘。要求必须对运算符进行重载,如果用函数如multiply(matrix,matrix)去实现矩阵之间的运算一律记0分。 输入 第一行输入所需要的矩阵个数c; 第二行输入矩阵的阶数n,即矩阵是一个nn的矩阵; 第三行开始依次输入c个矩阵. 输出 c个矩阵相乘的结果 要求用C++实现
时间: 2024-03-07 13:48:54 浏览: 83
矩阵相乘的c++实现
5星 · 资源好评率100%
好的,我可以帮你解决这个问题。以下是代码实现和注释:
```c++
#include <iostream>
#include <vector>
using namespace std;
class MyMatrix {
private:
vector<vector<int>> matrix;
int n; // 矩阵的阶数
public:
MyMatrix() {} // 默认构造函数
MyMatrix(int n) : n(n) { // 构造n*n的矩阵
matrix.resize(n, vector<int>(n, 0)); // 初始化为0
}
// 运算符重载*
MyMatrix operator* (const MyMatrix& b) const {
MyMatrix c(n); // 构造一个n*n的矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
c.matrix[i][j] += matrix[i][k] * b.matrix[k][j]; // 矩阵相乘
}
}
}
return c;
}
// 重载<<,输出矩阵
friend ostream& operator<< (ostream& out, const MyMatrix& m) {
for (int i = 0; i < m.n; i++) {
for (int j = 0; j < m.n; j++) {
out << m.matrix[i][j] << ' ';
}
out << endl;
}
return out;
}
// 输入矩阵
friend istream& operator>> (istream& in, MyMatrix& m) {
for (int i = 0; i < m.n; i++) {
for (int j = 0; j < m.n; j++) {
in >> m.matrix[i][j];
}
}
return in;
}
};
int main() {
int c, n;
cin >> c >> n;
vector<MyMatrix> matrices(c, MyMatrix(n)); // 构造c个n*n的矩阵
for (int i = 0; i < c; i++) {
cin >> matrices[i]; // 输入矩阵
}
MyMatrix result(n);
for (int i = 0; i < c; i++) {
result = result * matrices[i]; // 矩阵相乘
}
cout << result; // 输出结果
return 0;
}
```
输入样例:
```
3
2
1 2
3 4
5 6
7 8
9 10
11 12
```
输出样例:
```
456 524
1008 1184
```
阅读全文