用友元函数函数重载运算符“+”和“-”,将两个二维数组相加和相减。
时间: 2023-10-04 21:12:18 浏览: 179
运算符重载:友元(friend)函数问题
好的,让我们一步步来实现:
首先,我们需要定义一个二维数组类,可以在类中定义一个二维数组,以及一些成员函数和友元函数,如下所示:
```c++
class TwoDimensionalArray {
private:
int **data;
int rows, cols;
public:
TwoDimensionalArray(int r, int c);
~TwoDimensionalArray();
void input();
void output();
friend TwoDimensionalArray operator+(const TwoDimensionalArray& a, const TwoDimensionalArray& b);
friend TwoDimensionalArray operator-(const TwoDimensionalArray& a, const TwoDimensionalArray& b);
};
```
在类中,我们定义了一个二维数组 `data`,以及它的行数 `rows` 和列数 `cols`。我们还定义了一个构造函数 `TwoDimensionalArray(int r, int c)` 和析构函数 `~TwoDimensionalArray()`,用于初始化和销毁二维数组,以及输入输出函数 `input()` 和 `output()`,用于输入和输出二维数组的元素。最后,我们定义了两个友元函数 `operator+()` 和 `operator-()`,分别用于重载运算符“+”和“-”,实现两个二维数组的相加和相减。
在类外,我们可以实现这两个友元函数,如下所示:
```c++
TwoDimensionalArray operator+(const TwoDimensionalArray& a, const TwoDimensionalArray& b) {
TwoDimensionalArray c(a.rows, a.cols); // 定义一个新的二维数组,用于存储相加的结果
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
c.data[i][j] = a.data[i][j] + b.data[i][j]; // 相加操作
}
}
return c; // 返回相加的结果
}
TwoDimensionalArray operator-(const TwoDimensionalArray& a, const TwoDimensionalArray& b) {
TwoDimensionalArray c(a.rows, a.cols); // 定义一个新的二维数组,用于存储相减的结果
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
c.data[i][j] = a.data[i][j] - b.data[i][j]; // 相减操作
}
}
return c; // 返回相减的结果
}
```
在这两个函数中,我们首先定义一个新的二维数组 `c`,用于存储相加或相减的结果。然后,我们使用两个循环遍历原来的两个二维数组 `a` 和 `b`,对应元素相加或相减,存储到新的二维数组 `c` 中。最后,我们返回相加或相减的结果 `c`。
下面是完整的代码实现:
```c++
#include <iostream>
using namespace std;
class TwoDimensionalArray {
private:
int **data;
int rows, cols;
public:
TwoDimensionalArray(int r, int c) {
rows = r;
cols = c;
data = new int*[rows];
for (int i = 0; i < rows; i++) {
data[i] = new int[cols];
}
}
~TwoDimensionalArray() {
for (int i = 0; i < rows; i++) {
delete[] data[i];
}
delete[] data;
}
void input() {
cout << "请输入二维数组的元素:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> data[i][j];
}
}
}
void output() {
cout << "二维数组的元素为:" << endl;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << data[i][j] << " ";
}
cout << endl;
}
}
friend TwoDimensionalArray operator+(const TwoDimensionalArray& a, const TwoDimensionalArray& b) {
TwoDimensionalArray c(a.rows, a.cols); // 定义一个新的二维数组,用于存储相加的结果
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
c.data[i][j] = a.data[i][j] + b.data[i][j]; // 相加操作
}
}
return c; // 返回相加的结果
}
friend TwoDimensionalArray operator-(const TwoDimensionalArray& a, const TwoDimensionalArray& b) {
TwoDimensionalArray c(a.rows, a.cols); // 定义一个新的二维数组,用于存储相减的结果
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
c.data[i][j] = a.data[i][j] - b.data[i][j]; // 相减操作
}
}
return c; // 返回相减的结果
}
};
int main() {
int rows, cols;
cout << "请输入二维数组的行数和列数:" << endl;
cin >> rows >> cols;
TwoDimensionalArray a(rows, cols);
a.input();
a.output();
TwoDimensionalArray b(rows, cols);
b.input();
b.output();
TwoDimensionalArray c = a + b;
c.output();
TwoDimensionalArray d = a - b;
d.output();
return 0;
}
```
以上就是用友元函数函数重载运算符“+”和“-”,将两个二维数组相加和相减的实现过程。
阅读全文