📅  最后修改于: 2023-12-03 14:39:38.846000             🧑  作者: Mango
运算符重载是 C++ 中的一个强大、灵活的特性,可以让你自定义现有的运算符(比如 +
、-
、*
、/
等)的行为,使其能够适用于自定义的类或数据类型。这个特性在 C++ 中被广泛使用,在编写复杂的数据处理和算法时非常有用。
本题要求你实现一个矩阵类 Matrix
,其中包含一个二维整数数组 data
,以及 operator+
运算符重载,使得两个 Matrix
对象可以相加,返回一个新的 Matrix
对象。
我们先定义 Matrix
类的数据结构:
class Matrix {
public:
int rows, cols;
vector<vector<int>> data;
Matrix() : rows(0), cols(0) {}
Matrix(int rows_, int cols_) : rows(rows_), cols(cols_), data(rows, vector<int>(cols)) {}
};
实现 operator+
函数,可以使用下面的代码:
Matrix operator+(const Matrix& a, const Matrix& b) {
assert(a.rows == b.rows && a.cols == b.cols);
Matrix 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;
}
这段代码可以实现两个矩阵相加的功能。operator+
函数接受两个矩阵 a
和 b
作为参数,并返回一个新的矩阵 c
,其中元素为 a
和 b
对应元素的和。
接下来是 operator+
函数的详细解释:
assert
函数检查矩阵 a
和 b
的大小是否相同。如果不同,程序将抛出一个异常,终止程序运行。c
,和 a
、b
的大小相同。a
和 b
的对应元素相加并赋值给 c
。c
矩阵。以下是一个简单的测试样例:
Matrix a(3, 3);
a.data = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
Matrix b(3, 3);
b.data = {{9, 8, 7},
{6, 5, 4},
{3, 2, 1}};
Matrix c = a + b;
for (int i = 0; i < c.rows; i++) {
for (int j = 0; j < c.cols; j++) {
cout << c.data[i][j] << " ";
}
cout << endl;
}
输出结果如下:
10 10 10
10 10 10
10 10 10
可以看到,程序成功将两个矩阵相加,并得到了正确的输出。
运算符重载是 C++ 中一个强大的特性,可以让你定义自己的运算符行为,从而使程序更加灵活、高效。在本题中,我们使用了运算符重载实现了矩阵的相加功能,为数据处理和算法提供了更强大的工具。