用C++编写一个程序完成下列题目,编写一个程序,用成员函数重载运算符“+”和“-”,将两个二维数组相加和相减, 要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。
时间: 2024-03-22 13:37:57 浏览: 69
好的,下面是代码实现:
```cpp
#include <iostream>
using namespace std;
class Array2D {
private:
int** data; // 二维数组指针
int row, col; // 行数、列数
public:
Array2D(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 j = 0; j < col; ++j) {
data[i][j] = i * col + j;
}
}
}
Array2D(const Array2D& arr) : row(arr.row), col(arr.col) {
// 拷贝构造函数,用于深拷贝
data = new int*[row];
for (int i = 0; i < row; ++i) {
data[i] = new int[col];
for (int j = 0; j < col; ++j) {
data[i][j] = arr.data[i][j];
}
}
}
~Array2D() {
// 析构函数,释放内存
for (int i = 0; i < row; ++i) {
delete[] data[i];
}
delete[] data;
}
Array2D operator+(const Array2D& arr) const {
// 重载加法运算符
Array2D temp(*this);
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
temp.data[i][j] += arr.data[i][j];
}
}
return temp;
}
Array2D operator-(const Array2D& arr) const {
// 重载减法运算符
Array2D temp(*this);
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
temp.data[i][j] -= arr.data[i][j];
}
}
return temp;
}
void print() const {
// 打印二维数组
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
cout << data[i][j] << " ";
}
cout << endl;
}
}
};
int main() {
int r, c;
cout << "请输入第二个二维数组的行数和列数:" << endl;
cin >> r >> c;
Array2D arr1(3, 3);
Array2D arr2(r, c);
cout << "第一个二维数组:" << endl;
arr1.print();
cout << "第二个二维数组:" << endl;
arr2.print();
cout << "两个二维数组相加:" << endl;
Array2D sum = arr1 + arr2;
sum.print();
cout << "两个二维数组相减:" << endl;
Array2D diff = arr1 - arr2;
diff.print();
return 0;
}
```
代码中,首先定义了 `Array2D` 类,表示二维数组。在类中定义了二维数组指针 `data`、行数 `row` 和列数 `col`。构造函数用于初始化二维数组,拷贝构造函数用于深拷贝,析构函数用于释放内存。重载了加法运算符和减法运算符,分别用于实现两个二维数组相加和相减。最后在 `main` 函数中输入第二个二维数组的行数和列数,创建两个二维数组 `arr1` 和 `arr2`,并输出二维数组和它们的和、差。
阅读全文