写出这个问题的代码问题描述】 编写一个程序,定义一个安全、动态二维double型的数组类Matrix。 实现Matrix table(row,col)定义row行col列的二维数组, row和col为正整数; 实现table(i,j)访问table的第i行第j列的元素,行号和列号从0开始; 实现Matrix的输入输出(>>、<<); 实现矩阵加等、乘等运算(+=、*=),例:Matrix& operator+=(const Matrix&); Matrix& operator*=(const Matrix&); 实现矩阵的赋值运算(=),例:Matrix& operator=(const Matrix&)。 【输入形式】 第一行table1的行列值row1和col1,空格分隔; 第二行table1的初始化值,共row1*col1个数据,空格分隔; 第三行table2的行列值row2和col2,空格分隔; 第四行table2的初始化值,共row2*col2个数据,空格分隔; 【输出形式】 Matrix的输出格式为row行col列, 数据空格分隔; 若table1和table2不满足矩阵的加法和乘法运算规则,输出ERROR!; 依次输出以下表达式的值,每个输出间隔一行; table1(row1/2,col1/2); table1 *= table2; table1 += table2; table1 = table2。
时间: 2024-01-22 16:21:13 浏览: 144
这是一个比较复杂的问题,需要实现一个动态二维数组类,并且重载运算符。以下是可能的实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
class Matrix {
private:
vector<vector<double> > data; // 存储矩阵元素的二维数组
int rows, cols; // 矩阵的行数和列数
public:
// 构造函数,初始化矩阵
Matrix(int r, int c) : rows(r), cols(c) {
data.resize(rows);
for (int i = 0; i < rows; i++) {
data[i].resize(cols);
}
}
// 获取矩阵的行数和列数
int getRows() const {
return rows;
}
int getCols() const {
return cols;
}
// 重载下标运算符,访问矩阵元素
double& operator()(int i, int j) {
return data[i][j];
}
double operator()(int i, int j) const {
return data[i][j];
}
// 重载输入输出运算符
friend istream& operator>>(istream& in, Matrix& m) {
for (int i = 0; i < m.rows; i++) {
for (int j = 0; j < m.cols; j++) {
in >> m(i, j);
}
}
return in;
}
friend ostream& operator<<(ostream& out, const Matrix& m) {
for (int i = 0; i < m.rows; i++) {
for (int j = 0; j < m.cols; j++) {
out << m(i, j) << " ";
}
out << endl;
}
return out;
}
// 重载加等、乘等运算符
Matrix& operator+=(const Matrix& rhs) {
if (rows != rhs.rows || cols != rhs.cols) {
cout << "ERROR!" << endl;
return *this;
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
data[i][j] += rhs(i, j);
}
}
return *this;
}
Matrix& operator*=(const Matrix& rhs) {
if (cols != rhs.rows) {
cout << "ERROR!" << endl;
return *this;
}
Matrix res(rows, rhs.cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < rhs.cols; j++) {
for (int k = 0; k < cols; k++) {
res(i, j) += data[i][k] * rhs(k, j);
}
}
}
*this = res;
return *this;
}
// 重载赋值运算符
Matrix& operator=(const Matrix& rhs) {
if (this == &rhs) {
return *this;
}
rows = rhs.rows;
cols = rhs.cols;
data = rhs.data;
return *this;
}
};
int main() {
int row1, col1, row2, col2;
cin >> row1 >> col1;
Matrix table1(row1, col1);
cin >> table1;
cin >> row2 >> col2;
Matrix table2(row2, col2);
cin >> table2;
cout << table1(row1 / 2, col1 / 2) << endl;
table1 *= table2;
cout << table1 << endl;
table1 += table2;
cout << table1 << endl;
table1 = table2;
cout << table1 << endl;
return 0;
}
```
阅读全文