用动态分配空间和运算符重载写一个矩阵类,并实现矩阵的加法和乘法
时间: 2024-03-24 10:36:36 浏览: 76
好的,我可以帮你解决这个问题。
下面是一个使用动态分配空间和运算符重载实现矩阵类的示例代码:
```c++
#include <iostream>
using namespace std;
class Matrix {
private:
int rows, cols;
int **data; // 二维数组指针
public:
Matrix(int rows, int cols) {
this->rows = rows;
this->cols = cols;
data = new int*[rows];
for (int i = 0; i < rows; i++) {
data[i] = new int[cols];
}
}
~Matrix() {
for (int i = 0; i < rows; i++) {
delete[] data[i];
}
delete[] data;
}
Matrix operator+(const Matrix& m) const {
if (rows != m.rows || cols != m.cols) {
cerr << "ERROR: Matrix size mismatch!" << endl;
exit(1);
}
Matrix result(rows, cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result.data[i][j] = data[i][j] + m.data[i][j];
}
}
return result;
}
Matrix operator*(const Matrix& m) const {
if (cols != m.rows) {
cerr << "ERROR: Matrix size mismatch!" << endl;
exit(1);
}
Matrix result(rows, m.cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < m.cols; j++) {
result.data[i][j] = 0;
for (int k = 0; k < cols; k++) {
result.data[i][j] += data[i][k] * m.data[k][j];
}
}
}
return result;
}
void setData(int i, int j, int value) {
data[i][j] = value;
}
int getData(int i, int j) const {
return data[i][j];
}
};
int main() {
Matrix a(2, 3);
Matrix b(3, 2);
a.setData(0, 0, 1);
a.setData(0, 1, 2);
a.setData(0, 2, 3);
a.setData(1, 0, 4);
a.setData(1, 1, 5);
a.setData(1, 2, 6);
b.setData(0, 0, 7);
b.setData(0, 1, 8);
b.setData(1, 0, 9);
b.setData(1, 1, 10);
b.setData(2, 0, 11);
b.setData(2, 1, 12);
Matrix c = a + a;
Matrix d = a * b;
cout << "Matrix a:" << endl;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << a.getData(i, j) << " ";
}
cout << endl;
}
cout << "Matrix b:" << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
cout << b.getData(i, j) << " ";
}
cout << endl;
}
cout << "Matrix c = a + a:" << endl;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
cout << c.getData(i, j) << " ";
}
cout << endl;
}
cout << "Matrix d = a * b:" << endl;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
cout << d.getData(i, j) << " ";
}
cout << endl;
}
return 0;
}
```
上面的代码中,我们定义了一个 `Matrix` 类,它有两个私有成员变量 `rows` 和 `cols`,分别表示矩阵的行数和列数。它还有一个二维数组指针 `data`,用于存储矩阵中的元素。
在构造函数中,我们首先动态分配 `rows` 行 `cols` 列的二维数组,并将每个元素初始化为 0。在析构函数中,我们释放了动态分配的内存。
我们还重载了加号运算符和乘号运算符,分别实现了矩阵的加法和乘法。在运算符函数中,我们首先判断两个矩阵的行数和列数是否匹配,如果不匹配则输出错误信息并退出程序。然后创建一个新的矩阵对象 `result`,并将每个元素计算出来。最后返回 `result`。
在 `main` 函数中,我们创建了两个矩阵对象 `a` 和 `b`,并设置了它们的元素。然后分别计算了矩阵的加法和乘法,并将结果输出到控制台。
希望这个示例代码能够帮助你完成任务,如果你有任何问题可以随时问我。
阅读全文