编写一个完整的C++程序,要求用成员函数重载运算符“+”和“-”将两个二维数组相加和相减,要求第1个二维数组的值由构造函数设置,第2个二维数组的值由键盘输入。
时间: 2024-03-23 10:42:53 浏览: 15
好的,下面是代码实现:
```cpp
#include <iostream>
using namespace std;
// 定义二维数组类
class Matrix {
private:
int row, col;
int **data; // 二维数组指针
public:
Matrix(int r, int c) {
row = r;
col = c;
// 动态分配内存
data = new int*[row];
for (int i = 0; i < row; i++) {
data[i] = new int[col];
}
// 初始化二维数组
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
data[i][j] = i + j;
}
}
}
// 析构函数
~Matrix() {
for (int i = 0; i < row; i++) {
delete[] data[i];
}
delete[] data;
}
// 重载运算符+
Matrix operator+(const Matrix& m) {
Matrix result(row, col);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
result.data[i][j] = data[i][j] + m.data[i][j];
}
}
return result;
}
// 重载运算符-
Matrix operator-(const Matrix& m) {
Matrix result(row, col);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
result.data[i][j] = data[i][j] - m.data[i][j];
}
}
return result;
}
// 打印二维数组的值
void print() {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cout << data[i][j] << " ";
}
cout << endl;
}
}
};
int main() {
int row, col;
cout << "请输入二维数组的行数和列数:" << endl;
cin >> row >> col;
Matrix m1(row, col);
cout << "m1数组的值为:" << endl;
m1.print();
Matrix m2(row, col);
cout << "请输入m2数组的值:" << endl;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cin >> m2.data[i][j];
}
}
cout << "m2数组的值为:" << endl;
m2.print();
Matrix m3 = m1 + m2;
cout << "m1 + m2的值为:" << endl;
m3.print();
Matrix m4 = m1 - m2;
cout << "m1 - m2的值为:" << endl;
m4.print();
return 0;
}
```
在这个程序中,我们定义了一个二维数组类 Matrix,其中包括行数、列数和二维数组的指针 data。在构造函数中,我们动态分配内存并初始化二维数组的值。在析构函数中,我们释放动态分配的内存。在重载运算符+和-中,我们对两个二维数组进行相加和相减的操作,并返回结果。在程序的主函数中,我们首先输入二维数组的行数和列数,然后创建两个二维数组对象 m1 和 m2,并分别输出它们的值。接下来,我们对 m1 和 m2 进行相加和相减的操作,并输出结果。