用友元函数重载运算符“+”和“-”将两个二维数组相加和相减。要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。
时间: 2024-02-11 21:08:03 浏览: 72
好的,这是一个比较典型的友元函数重载运算符的例子。下面是代码实现:
```c++
#include <iostream>
using namespace std;
class TwoDimArray {
private:
int **arr;
int rows, cols;
public:
TwoDimArray(int r, int c) {
rows = r;
cols = c;
arr = new int*[rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
for (int j = 0; j < cols; j++) {
arr[i][j] = i * cols + j;
}
}
}
void input() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cin >> arr[i][j];
}
}
}
void output() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
}
friend TwoDimArray operator+(const TwoDimArray& a, const TwoDimArray& b);
friend TwoDimArray operator-(const TwoDimArray& a, const TwoDimArray& b);
};
TwoDimArray operator+(const TwoDimArray& a, const TwoDimArray& b) {
TwoDimArray res(a.rows, a.cols);
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
res.arr[i][j] = a.arr[i][j] + b.arr[i][j];
}
}
return res;
}
TwoDimArray operator-(const TwoDimArray& a, const TwoDimArray& b) {
TwoDimArray res(a.rows, a.cols);
for (int i = 0; i < a.rows; i++) {
for (int j = 0; j < a.cols; j++) {
res.arr[i][j] = a.arr[i][j] - b.arr[i][j];
}
}
return res;
}
int main() {
TwoDimArray a(2, 3);
TwoDimArray b(2, 3);
b.input();
TwoDimArray c = a + b;
TwoDimArray d = a - b;
cout << "a:" << endl;
a.output();
cout << "b:" << endl;
b.output();
cout << "a+b:" << endl;
c.output();
cout << "a-b:" << endl;
d.output();
return 0;
}
```
这里我们定义了一个叫做 `TwoDimArray` 的类,其中包含了一个二维数组 `arr`,以及数组的行数 `rows` 和列数 `cols`。我们在构造函数中对 `arr` 进行了初始化,将其赋值为按顺序递增的数。我们还定义了 `input` 和 `output` 两个函数,分别用于输入和输出数组的值。
然后,我们通过重载运算符 `+` 和 `-` 来实现两个二维数组的加减。这里我们使用了友元函数的方式来实现操作符重载,这样我们就可以直接在函数中访问类的私有成员 `arr`、`rows` 和 `cols`。
最后,我们在 `main` 函数中构造了两个 `TwoDimArray` 类的对象 `a` 和 `b`,其中 `a` 的值由构造函数初始化,`b` 的值通过键盘输入。然后我们使用重载的 `+` 和 `-` 运算符分别对两个二维数组进行加减,最后输出结果。
希望这个例子可以帮助你理解友元函数和运算符重载的使用。
阅读全文