题目描述 定义一个矩阵类MyMatrix,并且在类中进行运算符重定义,用*实现矩阵相乘。要求必须对运算符进行重载,如果用函数如multiply(matrix,matrix)去实现矩阵之间的运算一律记0分。 输入 第一行输入所需要的矩阵个数c; 第二行输入矩阵的阶数n,即矩阵是一个n*n的矩阵; 第三行开始依次输入c个矩阵. 输出 c个矩阵相乘的结果 样例查看模式 正常显示 查看格式 输入样例1 <-复制 2 2 1 2 1 2 1 0 1 1 输出样例1 3 2 3 2
时间: 2024-03-16 15:43:00 浏览: 166
以下是实现矩阵相乘的MyMatrix类的代码示例:
```c++
#include<iostream>
using namespace std;
class MyMatrix {
private:
int **matrix; // 二维数组指针
int n; // 矩阵阶数
public:
MyMatrix(int n = 0) :n(n) { // 构造函数
matrix = new int*[n];
for (int i = 0; i < n; i++)
matrix[i] = new int[n];
}
~MyMatrix() { // 析构函数
for (int i = 0; i < n; i++)
delete[] matrix[i];
delete[] matrix;
}
int& operator()(const int& row, const int& col) { // 重载()
return matrix[row][col];
}
MyMatrix operator*(const MyMatrix& m) const { // 重载*
MyMatrix result(n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++)
result.matrix[i][j] += matrix[i][k] * m.matrix[k][j];
return result;
}
};
int main() {
int c, n;
cin >> c >> n;
MyMatrix result(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> result(i, j);
}
}
for (int i = 1; i < c; i++) {
MyMatrix m(n);
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
cin >> m(j, k);
}
}
result = result * m;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << result(i, j) << " ";
}
cout << endl;
}
return 0;
}
```
该程序首先定义了一个MyMatrix类,包含二维数组指针、矩阵阶数等私有成员变量,并实现了构造函数、析构函数、重载运算符()和*。
在主函数中,首先输入矩阵个数c和矩阵阶数n,然后输入第一个矩阵并存储在result中。接下来,循环读入剩余的c-1个矩阵,每读入一个矩阵就用result乘上该矩阵并将结果存回result中。最后,输出result中的元素即可。
需要注意的是,在重载运算符*时,需要定义一个新的MyMatrix对象result,并在循环中逐个计算其元素值。
阅读全文