定义一个矩阵类MyMatrix,并且在类中进行运算符重定义,用*实现矩阵相乘。要求必须对运算符进行重载输入 第一行输入所需要的矩阵个数c; 第二行输入矩阵的阶数n,即矩阵是一个n*n的矩阵; 第三行开始依次输入c个矩阵. 输出 c个矩阵相乘的结果
时间: 2024-03-07 18:47:39 浏览: 208
c#矩阵编程
4星 · 用户满意度95%
好的,以下是一个实现了矩阵类MyMatrix的示例代码,其中重载了*运算符来实现矩阵相乘,并且读入了多个矩阵并进行了相乘操作,输出了结果矩阵:
```c++
#include <iostream>
#include <vector>
using namespace std;
class MyMatrix {
private:
vector<vector<double>> matrix;
int row, col;
public:
MyMatrix(int r, int c) : row(r), col(c) {
matrix.resize(row, vector<double>(col));
}
void set(int r, int c, double val) {
matrix[r][c] = val;
}
double get(int r, int c) const {
return matrix[r][c];
}
MyMatrix operator*(const MyMatrix& other) const {
if (col != other.row) {
throw "Invalid operation: matrices cannot multiply each other.";
}
MyMatrix result(row, other.col);
for (int i = 0; i < row; i++) {
for (int j = 0; j < other.col; j++) {
double sum = 0;
for (int k = 0; k < col; k++) {
sum += matrix[i][k] * other.matrix[k][j];
}
result.set(i, j, sum);
}
}
return result;
}
};
int main() {
int c, n;
cin >> c >> n;
vector<MyMatrix> matrices(c, MyMatrix(n, n));
for (int i = 0; i < c; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
double val;
cin >> val;
matrices[i].set(j, k, val);
}
}
}
MyMatrix result = matrices[0];
for (int i = 1; i < c; i++) {
result = result * matrices[i];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << result.get(i, j) << " ";
}
cout << endl;
}
return 0;
}
```
在上面的代码中,我们定义了一个矩阵类MyMatrix,其中包含一个二维vector作为矩阵数据,以及矩阵的行和列数。我们通过构造函数来初始化矩阵的行和列数,并通过set方法来设置矩阵的元素值,通过get方法来获取矩阵的元素值。
在类中重载了*运算符,实现了矩阵相乘的功能。在运算符重载中,我们首先判断两个矩阵是否可以相乘,如果不能相乘则抛出一个异常。如果可以相乘,则创建一个新的矩阵对象作为结果矩阵,并遍历矩阵的每个元素进行相乘和累加操作,最后返回结果矩阵。
在主函数中,我们首先读入了需要进行矩阵相乘的矩阵个数c和矩阵的阶数n。然后,我们使用一个vector来存储这些矩阵,并逐个读入矩阵的元素值。接下来,我们将这些矩阵进行相乘,得到结果矩阵,并遍历输出了结果矩阵的数据。
阅读全文